git 怎么知道有冲突
how does git know there is a conflict
原来有师父去
m1->m2
还有一个分支
m1->m2
\
->b1->b2
我将 master 合并到分支中
m1->m2 mb(merge commit)
\ /
->b1->b2
假设我在合并主文件时在分支中修复的一个文件中存在冲突。我修复了它,它现在看起来完全不像文件在 master 中的样子(在提交 m3 时)。如果我将分支(现在在 commit mb)合并回 master,git 不会抱怨存在冲突。文件没有什么不同吗?它怎么知道它不是冲突并且它需要使用来自分支的文件?
我知道这是正确的行为,但我很好奇是什么告诉 git 分支中的那个是 'right' 那个。
须知:什么是合并?它是两个分支 自合并基础 以来的变化的组合(即最近分支“分歧”的地方)。
"what tells git that the one in branch is the 'right' one."
这就是“反向”合并的全部要点。想象一下这种情况:
mergebase
|
A -- B -- C <- master
\
X <- branch
此时,如果您在两个分支之间进行任何一种合并,B 就是合并基础。假设 C 和 X 都以生成潜在合并冲突的方式更改同一个文件。好的,所以你将 master
合并到 branch
并修复该文件中的冲突(在下图中形成合并提交 M)。这也将合并基础移动到master
(C) 的尖端,为即将到来的正向合并做准备:
mergebase
|
A -- B -- C <- master
\ \
X -- M <- branch
希望当你合并 branch
到 master
时,master
没有变化 因为合并基础 C(至少与尊重这个文件)。因此 master
自合并基础以来 没有贡献 ,但是 branch
有贡献(合并提交 M 的文件版本与 C 不同),所以只有branch
有助于合并并采用其文件版本。
原来有师父去
m1->m2
还有一个分支
m1->m2
\
->b1->b2
我将 master 合并到分支中
m1->m2 mb(merge commit)
\ /
->b1->b2
假设我在合并主文件时在分支中修复的一个文件中存在冲突。我修复了它,它现在看起来完全不像文件在 master 中的样子(在提交 m3 时)。如果我将分支(现在在 commit mb)合并回 master,git 不会抱怨存在冲突。文件没有什么不同吗?它怎么知道它不是冲突并且它需要使用来自分支的文件?
我知道这是正确的行为,但我很好奇是什么告诉 git 分支中的那个是 'right' 那个。
须知:什么是合并?它是两个分支 自合并基础 以来的变化的组合(即最近分支“分歧”的地方)。
"what tells git that the one in branch is the 'right' one."
这就是“反向”合并的全部要点。想象一下这种情况:
mergebase
|
A -- B -- C <- master
\
X <- branch
此时,如果您在两个分支之间进行任何一种合并,B 就是合并基础。假设 C 和 X 都以生成潜在合并冲突的方式更改同一个文件。好的,所以你将 master
合并到 branch
并修复该文件中的冲突(在下图中形成合并提交 M)。这也将合并基础移动到master
(C) 的尖端,为即将到来的正向合并做准备:
mergebase
|
A -- B -- C <- master
\ \
X -- M <- branch
希望当你合并 branch
到 master
时,master
没有变化 因为合并基础 C(至少与尊重这个文件)。因此 master
自合并基础以来 没有贡献 ,但是 branch
有贡献(合并提交 M 的文件版本与 C 不同),所以只有branch
有助于合并并采用其文件版本。