假设我有一个基于 master 的 feature_branch 并包含提交 D 和 E。之后,master 收到两个新提交 F 和 G :
master: A---B---C---F---G
\
feature_branch: D---E
当我将 master 合并到我的 feature_branch 以合并新的更改时,我遇到了一些冲突。解决 feature_branch 中的这些冲突后,会在 feature_branch 中创建合并提交(我们称之为 M)。此时,历史是这样的:
master: A---B---C---F---G
\ \
feature_branch: D---E---M
现在,我感到困惑的是:master 分支仍然指向提交 G,这是在 feature_branch 中发生冲突解决之前的最后一次提交。
当我稍后将 feature_branch 合并回 master 时,我得到了快进合并,为什么我不会再次遇到相同的冲突,因为冲突解决引入了不同的更改? Git 如何处理这种情况?
我尝试将 feature_branch 合并回分支,并期望再次遇到相同的冲突,因为冲突解决方案已更改文件,但主分支指向具有该文件的另一个版本的先前提交。
你需要消化合并工作的方式。当您将分支
A
与 B
合并时,合并时考虑的是粗略地在它们最后一个共同祖先之后引入的更改。当您将 M
合并到 master
时,get 不会考虑来自 C
位的两个分支中来自 G
的更改(两个分支历史记录中存在的最后一次提交)。如果没有发生会产生冲突的变化,那么就不存在冲突。而且,分支历史上某个时刻发生冲突的速度与 git 无关......它考虑的只是 G..master
和 G..feature_branch
之间的差异。
旁注:在这种情况下,您有一个快进,因为在
master
之后 G
中没有提交.....如果过去 G
有提交,那么根据差异,您会遇到冲突G..master
和 G..feature-branch
....很可能不会发生冲突。