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

问题描述 投票:0回答:1

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

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

git merge origin/otherPersonsBranch

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

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

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

合并或拉动时,我们都得到了“已经是最新的”。

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

git
1个回答
0
投票

这个:

我刚刚注意到,当我把它签出到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提交。实际上,这总是正确的,只是如果一切都被提交,HEAD和你的索引根据定义匹配。同时,低级合并过程,在两个差异完成相应的文件匹配后运行,尝试保留未索引的工作树更改;这是事情变得非常混乱的地方。)

© www.soinside.com 2019 - 2024. All rights reserved.