我有主分支和发布分支。发布分支上的最后一次提交为文件添加了几行,比如A和B.然后这些更改被合并到master(事情发生)。
后来,其他一些提交要求掌握,其中一个再次从A和B中删除了这些几行。
现在我将master合并到release中。一切都合并得很好(除了几个小的冲突),但文件A和B保持不变,存在几行。
怎么会发生这种情况?我可以在合并之前检查发布分支上的提交,并使用相同的结果再次重复它。任何命令/开关,以了解合并期间发生了什么?
EDIT。 我似乎只是做错了什么,但我不明白如何正确地做到这一点。我可以很容易地复制这个问题,而且似乎它正在发生,因为'bad'行首先被添加到master上,然后被删除,并且它们master被合并到release中,其中'bad'行也存在。所以这两个提交来自主人'湮灭',并且释放保持不变,对吗?
那么,我在做什么: 7aee9be以“坏”行发布 84d7ed2在所有更改之前是主人,比上面的更改
现在我结账84d7ed2,添加'坏'行,提交(在新的测试分支上)。 然后我删除'坏'行,提交。 因此测试分支不再具有“坏”线。 然后我结账7aee9be并将测试分支合并到其中。 'bad'行又回来了,合并提交根本没有任何变化。
答案 0 :(得分:1)
所有关于共同祖先(在3-way merging中):
如果在执行最终的 merge (测试,没有坏线)时发布(使用坏线),则在发布中引入了“坏线”在共同的祖先之后,合并不会删除它。
从那个共同的祖先:
release
引入了错误的行test
已推出并删除了坏行在test
中合并release
不会删除release
中的错误行:与共同祖先相比,test
引入无变化< / strong>,而release
确实如此。保留release
的更改。
答案 1 :(得分:-1)
我会从git bisect
开始,找出问题的起源。一旦你有了#34;坏&#34;提交检查并从那一点开始跟踪以找出问题所在。 (因为你的案子确实出了问题)
git push origin master --force
的代码,这将导致覆盖旧代码正如我所建议的那样,试着在git bisect
的帮助下弄清楚什么时候开始。一旦弄清楚出了什么问题,解决它就会容易得多。