多次git cherry-pick解决冲突后再merge还是存在冲突,是什么原因呢?

昨天遇到了一个问题:从A分支检出B分支,在B分支上提交一次后,发现A分支又有了两次新的Merge提交,于是使用git cherry-pick将A分支的两次Merge提交均拿到了b分支上,参数为-m 1,中途遇到的冲突都解决了。但做完这些操作后使用merge将B分支合向A分支时发现还存在冲突。按我的理解,既然A分支上新的提交与B分支的冲突都在cherry-pick中被解决掉了,最后merge的时候就不该存在冲突呀。为什么会出现这种现象呢?
今天早上又重新试了一下,这次没有冲突。
请问哪位大佬能解释一下我的疑惑吗?是我对cherry-pick的理解不对吗?

阅读 3.9k
1 个回答
  1. A,B 同源为 O,到你开始操作之前,A 分支是 A0、A1,B 分支是 B0
  2. 你在 B0 上 cherry-pick A0、A1,然后解决冲突
  3. 很明显,这个时候 B 上就不是 A0、A1,而是修改后的 B1、B2
  4. git 无法判断 B0、B1、B2 与 A0、A1 之间的先后关系,所以就冲突,无法合并

此时你应该用 rebase,因为:

  1. 与上面(1)一样
  2. rebase 之后,B 分支变成 O、A0、A1、B0‘(注意这里多了一撇)
  3. git 可以准确判断版本先后关系,自然也不存在冲突
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏