如何在具有共同祖先的2个分支之间进行合并冲突?

时间:2018-01-24 18:31:18

标签: git merge version-control

我们最近在尝试合并两个分支时遇到了一个非常奇怪的问题。情况归结为以下几点:

  1. branch B是一个长期存在的分支,我们要合并回主干B,其中有一些其他提交
  2. 我们要将A中的AB中的git checkout A; git merge B合并回A
  3. 在执行A时,我们遇到与B引入的更改无关的合并冲突:这些冲突位于一堆文件中,这些文件可能不受git annotate的影响,但在git log中已更改{1}}
  4. 使用12341234跟踪其中一个冲突文件的祖先,我们有效地注意到冲突的位置有一个共同的提交祖先A:一行用{{注释1}} 5678B git annotate file1 5678^1234显示{{1}}的冲突行。
  5. 我不明白这是怎么可能的,并且无法在任何地方找到类似问题的任何线索。

1 个答案:

答案 0 :(得分:1)

在分支A的共同祖先之后,应在分支B上更改冲突文件。您可以再次git annotategit log仔细检查。

1。列出分别修改分支A和分支B中的冲突文件的提交:

git annotate filename A
git annotate filename B

注意: git annotate中的提交列表从旧的(在顶部)到新的(在底部)排序。

假设输出命令如下:

$ git annotate filename A
commit A1
commit A2
commit common
commit A3
commit A4

$ git annotate filename B
commit B1
commit B2
commit B3
commit common
commit B4

这意味着,在提交祖先commit common之后,冲突文件在提交A3中更改,并在分支A4中提交A;在分支B中,冲突文件在commit B4之后发生了变化。

2。将git日志显示为更改所有分支中的冲突文件的提交的图形

您可以使用以下命令显示通过图表更改冲突文件的提交:

git log --oneline --decorate --graph --all -- filename

然后图表如下所示:

* commit A4 (branch A)
* commit A3
|   * commit B4 (branch B)
*   | commit Common
|  \
*   | commit A2
*   | commit A1
|   * commit B3
|   * commit B2
|   * commit B1
|   |
…   …