Git merge并没有合并两个文件?

时间:2015-02-09 23:21:51

标签: git merge git-merge

我有主分支和发布分支。发布分支上的最后一次提交为文件添加了几行,比如A和B.然后这些更改被合并到master(事情发生)。

后来,其他一些提交要求掌握,其中一个再次从A和B中删除了这些几行。

现在我将master合并到release中。一切都合并得很好(除了几个小的冲突),但文件A和B保持不变,存在几行。

怎么会发生这种情况?我可以在合并之前检查发布分支上的提交,并使用相同的结果再次重复它。任何命令/开关,以了解合并期间发生了什么?

EDIT。 我似乎只是做错了什么,但我不明白如何正确地做到这一点。我可以很容易地复制这个问题,而且似乎它正在发生,因为'bad'行首先被添加到master上,然后被删除,并且它们master被合并到release中,其中'bad'行也存在。所以这两个提交来自主人'湮灭',并且释放保持不变,对吗?

那么,我在做什么: 7aee9be以“坏”行发布 84d7ed2在所有更改之前是主人,比上面的更改

现在我结账84d7ed2,添加'坏'行,提交(在新的测试分支上)。 然后我删除'坏'行,提交。 因此测试分支不再具有“坏”线。 然后我结账7aee9be并将测试分支合并到其中。 'bad'行又回来了,合并提交根本没有任何变化。

2 个答案:

答案 0 :(得分:1)

所有关于共同祖先(在3-way merging中):

如果在执行最终的 merge (测试,没有坏线)时发布(使用坏线),则在发布中引入了“坏线”在共同的祖先之后,合并不会删除它。

从那个共同的祖先:

  • release引入了错误的行
  • test已推出并删除了坏行

test中合并release不会删除release中的错误行:与共同祖先相比,test引入无变化< / strong>,而release确实如此。保留release的更改。

答案 1 :(得分:-1)

我会从git bisect开始,找出问题的起源。一旦你有了#34;坏&#34;提交检查并从那一点开始跟踪以找出问题所在。 (因为你的案子确实出了问题)

有几种选择:

  1. 有人做了一个rebase,所以你的提交被覆盖(不太可能,但它仍然是一个选项,因为如果有人做了很多可能你已经了解它的rebase。你的分支可能变得无法使用)。
  2. 有人推动了#34; old&#34;带有强制标记 git push origin master --force 的代码,这将导致覆盖旧代码
  3. 当您拉(pull = fetch + merge)时,您遇到了冲突,并通过将线留在适当的位置来解决它,现在它们将再次签入。
  4. 正如我所建议的那样,试着在git bisect的帮助下弄清楚什么时候开始。一旦弄清楚出了什么问题,解决它就会容易得多。