[注:本文不适合没有 git 基础的读者]
程序员在提 PR 的时候遇到 conflict 是很常见的事情。
我们遇到这类问题处理时的大概流程就是:回退文件,切换到 master,pull 最新的 master,切回开发的 branch,merge master。当然也可以 rebase,这些看个人习惯。
我之前有一个误区,有冲突的时候,回退的文件越早越容易解决 conflict。这些只用文字不太好说清楚,我们来画一个图。
比方说,两个人现在都在改一个文件,其他人的文件现在已经 merge 进 master 了,但是我改的文件才刚刚提 PR,这个时候就会有 conflict 出现,即,上图的 a3 点。这个时候我的做法应该是
1)本分支回退到 (a1,m2),
2)切换到 master,
3)pull master,
4)切换回我的分支,
5)merge master,
6)在这个基础上添加改动。
但是,我之前的理解有一个误区,就是第 1)步应该回退的越早越好,比如说回退到 m1,我认为这个也能 resolve conflict,但事实上,这个并不行。这可能是因为 b2 只能接受任何直接来自于 m2 的 branch 的 merge 操作,比如 a1 或 b1,但他们之前的节点它无法认出来,至于说为什么认不出来,这和 git 的某种内部机制有关,我这里也没搞得太清楚,以后有机会会去理解下。