我有两个分支结构:
---(commit 1) ----- (commit 2, refactoring) ----(CONFLICT)
\ /
\ /
-----(commit 3, modifying) --------/
在commit 1
我有一个文件text.txt
:
Part 1:
line 1
line 2
line 3
Part 2:
line 4
line 5
line 6
在commit 2
我将text.txt
的“第2部分”提取到part2.txt
中,所以我得到了:
text.txt
:
Part 1:
line 1
line 2
line 3
part2.txt
:
Part 2:
line 4
line 5
line 6
在commit 3
中,我稍微修改了text.txt
的两个部分:
Part 1:
line 1
line 2a
line 3
Part 2:
line 4
line 5b
line 6
合并两个分支我希望git足够聪明,并将line 2a
放入text.txt
和line 5b
进入part2.txt
。不幸的是,这不会发生。
我的期望是基于git gui blame part2.txt
检测到正确显示text.txt
的行的来源这一事实。
我的问题是:
答案 0 :(得分:1)
我没有看到与git gui blame part2.txt
相同的结果。我正在提交2. git gui blame
没有显示text.txt
。无论如何,回答你的问题:
如果它“开箱即用”,您认为在以下情况下会发生什么:在提交3中,您已将line 5
更改为line 5b
。同时在提交2中,由于某种原因,有人将“第2部分”行移动到两个相同的文件:part2a.txt
和part2b.txt
。如果git现在自动更改这两个这些文件,以便line 5b
?
Git不会尝试做出这些决定 - 它会留给你。
如果经常发生这种确切的冲突,则会有git-rerere
。否则你需要手动处理。幸运的是,merge.conflictstyle=diff3
配置选项显示了基本提交中文件的内容以及两个冲突的提交。这样可以很容易地看出哪一方改变了什么,以及原作是什么。有关详细信息,请参阅git-merge
手册页。