重现该情况的步骤 1. 在 git master 中创建文件 test.txt,其中包含内容
A
B
C
并提交它。
- 创建新分支 test-v1
在 master 分支中删除 B 行,这样你就拥有了
A C
从步骤 3 精选提交到 test-v1
checkout 分支 test-v1 并再次添加 B 行并提交
A B C
查看主分支
- git merge test-v1
我期望得到什么:
A
B
C
我得到了什么:
A
C
问题:为什么B在 merge 时会自动解决而不标记为 merge 冲突?
我尝试了不同的 merge 策略(git merge --strategy),但我没有找到任何可以获得预期结果的地方。唯一的方法是在 master 上 git rebase test-v1 。但我想在更复杂的设置中,它可以重写 master 的历史,对吗?
最佳答案
正如我们已经在 git IRC 中讨论的那样,在 thiago(Freenode 上的注册用户和经验丰富的 git 用户)的大力帮助下,我将采纳他的答案并将其放在这里以确保完整性:
在您分支“test-v1”时,文件 test.txt 确实包含内容
A
B
C
在两个分支中,master
和 test-v1
。
现在,您正在将 master
中的更改应用到 test.txt,并将它们挑选到分支 test-v1
。之后,您 checkout test-v1
并将 B
添加回文件中。
merge 后会发生什么?想象一下我现在是 git:
好吧,让我查一下共同祖先:啊,好吧,我明白了,文件测试看起来像 A B C
让我们看看
test-v1
中所做的更改:嗯,好吧,看起来与共同祖先相同- 让我们看看
master
中所做的更改:啊好吧,有些东西发生了变化,让我们考虑一下修改
-> 结果
A
C
关于git - 为什么 git 自动解决这个冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31824993/