2014-12-09 54 views
3

如果一个在相同的git回购工作,一个推上一个特性分支的变化:A-feature到回购之前现在需要之前,他可以做一个拉推。在我推入Git之前,何时需要拉动?

但是这里描述的确切条件在哪里?例如。它是否适用于推到回购站的任何分支上的任何更改?或者只有如果AB推到同一分支?意思是B可以推到B-feature即使A刚刚推在他面前A-feature

+2

应该可以在不拉动的情况下推送到不同的分支 – Karussell 2014-12-09 11:55:17

回答

4

这意味着B可以推到B特征,即使A只是推在他之前的A特征?

是的。你得到的警告是,只有当你是推到别人更新的一个分支:

hint: Updates were rejected because the tip of your current branch is behind 
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') 
hint: before pushing again. 

git pull唯一的选择将是一个git push --force(这将覆盖由AB的出版历史,如果B推动A-feature,这是不好的。)。
请参阅“git push --force, behind the scenes”。

如果任何人,但B正在B-feature,当B要推动地方B-feature分支上游回购不需要拉:推动将是一个快进一个:你是在顶部添加新的提交远程分支。

+0

可能值得一提的是强制推送。 – Jubobs 2014-12-09 12:07:25

+1

@Jubobs真的。我已经添加了一个链接到一个较老的答案,它说明了'git push --force'的效果:http://stackoverflow.com/a/23434601/6309 – VonC 2014-12-09 12:14:14

+0

酷。很高兴有一大堆旧的答案,方便:) – Jubobs 2014-12-09 12:16:20

3

为什么B在他(或她)可以将他们自己的改变推送到同一分支之前需要拉动A的变化的原因是否则B将会重写历史(取消A的提交以支持他们自己的),而A的提交(不属于B的本地分支)将会丢失。

只有当你推送到同一个分支时,情况才是这样,所以是的,B可以推送到另一个分支,而不必首先提交A的提交。在那种情况下,A和B的提交合并将在稍后进行,当它们的分支合并时。

如果要推到,即使它包含的是不是在你的本地分支提交远程分支,可以指示混帐不提醒你,反正与推送继续使用git push --force(或git push -f )。 但是,要小心,因为在大多数情况下(特别是当你与其他人一起工作时),这样做不可取。不在您本地分支中的提交将从远程分支中删除。

2

Git中的每个分支都是一个按时间顺序排列的提交。

当你想推送一个不是基于该分支的最新提交的提交时,你需要先提交中间提交(可能涉及手动合并)。

这只是一个问题,当多个用户推到相同的分支。当每个用户分别在个人分支上工作时,他们将永远不必在推动之前拉动。当然,除非他们故意要合并别人的分支。