这是我的情况:
我有两个功能分支 A 和 B。
我想合并这两个分支。
我做了以下事情:
创建一个从 A 分支出来的新分支 C
签出新分支C
run git merge B
从命令行
我希望这两个分支合并。如果对相同文件的更改存在冲突,则该命令应引发合并冲突。
但实际上,分支A和B中存在同一个文件,其内容不同,但没有报告合并冲突。相反,分支 A 中的文件内容会被分支 B 中的文件内容覆盖。
我不知道为什么没有报告合并冲突,更担心为什么文件的内容被覆盖。
任何提示或指示都会有帮助。谢谢。
让我们来看看发生了什么。
这通常是这样的。
4 - 5 [A]
/
1 - 2 - 3 - 6 [master]
\
7 - 8 [B]
A和B有分支master
。他们意见分歧。
但你可能也经历过这个。
6 - 7 [B]
/
4 - 5 [A]
/
1 - 2 - 3 - 6 [master]
这里 B 是 A 的分支。B 共享 A 的所有提交。让我们假设一下。
在 Git 中创建一个新分支只会在与 A 相同的提交中创建一个新标签。
6 - 7 [B]
/
4 - 5 [A][C]
/
1 - 2 - 3 - 6 [master]
- 签出新分支C
- run
git merge B
从命令行
当这种情况发生时,Git 注意到 C 是 B 的祖先。因此它会执行“快进”,这意味着它不会进行合并,它只是将 C 前进到 B 所在的位置。
6 - 7 [B][C]
/
4 - 5 [A]
/
1 - 2 - 3 - 6 [master]
如果 A 和 B 更改了相同的文件,则 B 会覆盖 A 中的更改。
git log
不幸的是,Github 扁平化了你的 Git 历史记录,给你一种错误的印象,认为它是线性的。您可以使用以下命令查看存储库的真实结构git log --graph --decorate --all
并检查它是否符合此处的场景。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)