我正在与同事一起开展一个项目,我们正在对应用程序上的单独工具进行更改。我们通常没有问题,但现在发生了一些奇怪的事情。
我们每天从主人那里拉,定期添加,提交和推送更改。在一天结束时,我们使用...合并分支。
git merge origin/otherPersonsBranch
...然后我们在离开前再添加。,提交和推送。
昨天,我们注意到至少有一个文件中某些更改没有合并。我们还没有发现任何其他人。
我们没有收到合并冲突,通常是:当弹出窗口时退出vmeditor。
合并或拉动时,我们都已经“及时”了。
也许我们在开始时错误地设置了分支?我不知道。我的错误是什么?有什么想法吗?
答案 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}}和您的索引匹配,根据定义。同时,低级合并过程,在两个差异完成相应的文件匹配后运行,也尝试保留未索引的工作树更改;这是事情变得非常混乱。)