我们最近在尝试合并两个分支时使用git遇到了一个非常奇怪的问题.情况可归结为以下情况:
> branch A是一个长期存在的分支,我们想要合并回主干B,它有一些其他的提交
>我们希望将A中的B合并,然后将A合并回B中
>做git checkout A时; git merge B我们遇到与A引入的更改无关的合并冲突:它们位于一堆文件中,这些文件据说是A未触及但在B中更改
>使用git annotate和git log来跟踪其中一个冲突文件的祖先我们有效地注意到冲突的位置有一个共同的提交系统1234:一行注释为A中的1234和B中的5678但是git注释文件1 5678 ^显示1234为冲突线.
我不明白这是如何可能的,并且无法在任何地方找到类似问题的任何线索.
最佳答案 在具有分支B的共同祖先之后,应该在分支A上更改冲突文件.并且可以再次通过git annotate和git 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
这意味着,在提交祖先提交公共后,冲突文件在提交A3中更改并在分支A中提交A4;在分支B中,冲突文件在之后是提交B4中的更改.
2.将git log显示为更改所有分支中冲突文件的提交的图形
您可以使用以下命令显示通过图形更改冲突文件的提交:
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
| |
… …