Git Merge没有从另一个分支接收一些更改

时间:2018-03-02 15:37:20

标签: git

我正在与同事一起开展一个项目,我们正在对应用程序上的单独工具进行更改。我们通常没有问题,但现在发生了一些奇怪的事情。

我们每天从主人那里拉,定期添加,提交和推送更改。在一天结束时,我们使用...合并分支。

git merge origin/otherPersonsBranch

...然后我们在离开前再添加。,提交和推送。

昨天,我们注意到至少有一个文件中某些更改没有合并。我们还没有发现任何其他人。

我们没有收到合并冲突,通常是:当弹出窗口时退出vmeditor。

合并或拉动时,我们都已经“及时”了。

也许我们在开始时错误地设置了分支?我不知道。我的错误是什么?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此:

  

我刚刚注意到,当我将checkout输出到otherPersonsBranch时,我得到了相关文件:

error: Your local changes to the following files would be
overwritten by checkout:
   xx/xx/fileInQuestion.js
 Please commit your changes or stash them before you switch branches

绝对重要。 可以在工作树中使用未提交的更改来运行git merge,但我强烈建议不要这样做。 (主要的问题是,如果合并出错,退出它可能非常困难。如果你已经提交了所有内容,很容易退出。)

在任何情况下,一旦你确实提交了所有内容,看看合并将会做什么,首先找到合并基础。请参阅,例如Find the most recent common ancestor of two Git branches或我最近的许多答案。合并将比较合并基础与两个分支提示中的每一个。您可以使用git diff自己做同样的事情 - 请参阅相同答案中的特殊语法,或者:

  

昨天,我们注意到至少有一个文件中某些更改未合并。

Git没有将两个分支提示相互比较。运行git merge $other会将基数与您的分支提示进行比较:

git diff --find-renames $base HEAD   # see what we did

再次他们的分支提示:

git diff --find-renames $base $other # see what they did

然后结合这两组变化。因此,选择的合并基础对于此过程至关重要,两个提示的内容也是如此。 (两者之间的任何提交都非常无关紧要,除了它们在定位合并基础提交方面的作用。)

(如果您有未提交的更改,则第一个git diff对您的索引有效,而不是HEAD提交。实际上,这始终是真的,只是如果所有内容都已提交,{ {1}}和您的索引匹配,根据定义。同时,低级合并过程,在两个差异完成相应的文件匹配后运行,也尝试保留未索引的工作树更改;这是事情变得非常混乱。)