Git 重构后合并-检测移动的文件部分
我有两个分支机构,其结构如下:Git 重构后合并-检测移动的文件部分,git,git-merge,Git,Git Merge,我有两个分支机构,其结构如下: ---(commit 1) ----- (commit 2, refactoring) ----(CONFLICT) \ / \ / -----(commit 3, modifying) --------/ 在commit 1中,我有一个文件text.txt: Pa
---(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
Part 1:
line 1
line 2
line 3
Part 2:
line 4
line 5
line 6
Part 1:
line 1
line 2a
line 3
Part 2:
line 4
line 5b
line 6
在commit 2
中,我将text.txt
的“第2部分”提取到part2.txt
中,因此我得到:
:text.txt
Part 1: line 1 line 2 line 3 Part 2: line 4 line 5 line 6
Part 1: line 1 line 2 line 3
Part 2: line 4 line 5 line 6
Part 1: line 1 line 2a line 3 Part 2: line 4 line 5b line 6
:part2.txt
Part 1: line 1 line 2 line 3 Part 2: line 4 line 5 line 6
Part 1: line 1 line 2 line 3
Part 2: line 4 line 5 line 6
Part 1: line 1 line 2a line 3 Part 2: line 4 line 5b line 6
commit 3
中,我稍微修改了text.txt
的两部分:
Part 1:
line 1
line 2
line 3
Part 2:
line 4
line 5
line 6
Part 1:
line 1
line 2
line 3
Part 2:
line 4
line 5
line 6
Part 1:
line 1
line 2a
line 3
Part 2:
line 4
line 5b
line 6
合并两个分支我希望git足够聪明,将第2a行
放入text.txt
中,将第5b行
放入part2.txt
。不幸的是,这没有发生
我的期望是基于这样一个事实,git gui.txt
检测正确显示text.txt
的行的起源
我的问题是:
- 为什么它不能开箱即用
- 是否有已知的解决方法
- 我没有看到与您使用
git-gui-part2.txt时相同的结果。我在执行任务2git-gui不显示text.txt
。无论如何,要回答您的问题:
- 如果它“开箱即用”,您认为在以下场景中会发生什么:在提交3中,您将
第5行
更改为第5b行
。与此同时,在commit 2中,出于某种原因,有人将“Part 2”行移动到两个相同的文件中:part2a.txt
和part2b.txt
。git现在是否应该自动将这两个文件更改为第5b行
Git不会尝试做出这样的决定,而是让你自己做决定
- 如果这种冲突频繁发生,则会出现
git-rere
。否则,您将需要手动处理。幸运的是,有一个merge.conflictstyle=diff3
configuration选项,它在基本提交以及两个冲突提交中显示文件的内容。这使得我们很容易看到哪一方改变了什么,以及原来是什么。有关详细信息,请参见git merge
手册页
我减少了示例文件中的行数,因此git可能无法识别移动的部分。但总体来说效果很好。谢谢你的回答!我知道,没有完美的解决方案。但常见的情况是简单的提取。我建议git生成冲突,但不是在text.txt中,而是在part2.txt中。这将引起人们对潜在问题的注意,并指出可能的正确解决方案。考虑新的“合并移动”的建议=(是的,冲突不)选项。