在我看来,我对git的不直观的合并行为(2.31.1版)有问题。让我用一个小玩具回购演示一下。
git init
touch file1
git add file1
git commit -m "Initial commit"
git branch feature现在,我有了一个带有空文件的commit和两个分支,main和feature,指向该提交。现在,我将主分支中的文件更改为
line1
line2
line3
line4
line5并将更改提交给
git add file1
git commit -m "Change file1"接下来,我去另一家分行
git checkout feature将file1更改为
line1
line2
line
line4
line5并再次提交更改
git add file1
git commit -m "Change file1"由此产生的提交树如下所示:
* b1beb63 - Change file1 (HEAD -> feature)
| * 32ea83d - Change file1 (main)
|/
* 2952256 - Initial commit现在我切换回main分支,并将feature合并到main中。
git checkout main
git config merge.conflictstyle diff3
git merge feature正如预期的那样,file1中存在冲突。然而,冲突看起来是这样的:
<<<<<<< HEAD
line1
line2
line3
line4
line5
||||||| 2952256
=======
line1
line2
line
line4
line5
>>>>>>> feature如您所见,git的行为就像整个文件是一个大冲突。我本以为它会是这样的:
line1
line2
<<<<<<< HEAD
line3
||||||| 2952256
=======
line
>>>>>>> feature
line4
line5这将是无限地更友好的用户。
我发现了一些线程,人们有类似的问题,因为不同的行尾。--这里不是这样的,,因为我用同一个编辑器在同一个平台上编辑了两个分支中的文件。
这类合并的当前解决方案是通过在两个分支(即git diff main:file1 feature:file1 )之间对文件执行不同的操作来手动查找更改。这是可行的,但相当烦人。
有什么方法可以得到我在这次合并中期望的行为吗?如果没有,有什么很好的理由不能这样做吗?
发布于 2022-01-11 16:38:48
GIT2.35.0将有一种新的冲突样式,它的行为与这里所希望的完全相同,称为zdiff3。它可以使用git config merge.conflictstyle zdiff3进行配置。添加--global以全局配置冲突样式。
我用git版本的2.35.0.rc0对它进行了测试,它产生了以下结果。
line1
line2
<<<<<<< HEAD
line3
||||||| 59df1b4
=======
line
>>>>>>> feature
line4
line5太棒了!
发布于 2021-12-15 21:11:22
tl;博士,您期望的行为是冲突的无效diff3表示。你不能两者兼得。
最初的提交令人痛苦地详细解释。。我试着总结一下。
让我们看看你的案子。你从这个开始。
# ancestor
# main
line1
line2
line3
line4
line5
# feature
line1
line2
line
line4
line5你要求对所有三个文件进行区分,这就是你得到的。
<<<<<<< HEAD
line1
line2
line3
line4
line5
||||||| 2952256
=======
line1
line2
line
line4
line5
>>>>>>> feature原始文件为空白。头把它改为增加了五行。功能增加了五行。这是对三方冲突的正确表述。
让我们看看你期望看到的..。
line1
line2
<<<<<<< HEAD
line3
||||||| 2952256
=======
line
>>>>>>> feature
line4
line5这表明原始文件包含4行。HEAD和feature在line2和line4之间增加了一条线。
换句话说,它说你合并了这些文件。
# ancestor
line1
line2
line4
line5
# main
line1
line2
line3
line4
line5
# feature
line1
line2
line
line4
line5那不是真的,祖先是空白的。
减少你想要的是好的双向冲突标记,但将击败点的3路冲突标记。
https://stackoverflow.com/questions/70369970
复制相似问题