是否可以在 cherry-pick 和 rebase 之后合并?

Is it possible to merge after cherry-pick and rebase?

是否可以在第4步合并而不冲突?

  1. cherry-pick commit 'E' 从 branch1 到 branch2

     branch1 : A - B - C - D - E
                     \
     branch2 :         F - G - E(cherry-pick from 1)
    
  2. 提交已添加到 branch2

     branch1 : A - B - C - D - E
                    \
     branch2 :         F - G - E - H - I
    
  3. 交互式变基并挤压提交,因为它们是同一问题的解决方案。

    (现在,我认为这是个错误的决定...)

     branch1 : A - B - C - D - E
                    \
     branch2 :        F - G - I'
    
  4. Cherry-pick 压缩再次提交到 branch1...

    (cherry-pick commit H, I 到 branch1 会更好吗?)

     branch1 : A - B - C - D - E - I'(conflict?)
                     \
     branch2 :         F - G - I'
    

这是一个有趣的问题,但除非您提供实际的 git 存储库以便检查变更集,否则没有人能够提供明确的答案。

存在合并冲突的事实与提交 H 和 I 是单独挑选还是一起重新设置基准无关。 E 也被压扁的事实 可能 是一个因素。

不过,更重要的是,问题的前提是一个小问题。 "Is it possible to merge without conflict?" 为什么这个合并需要在没有冲突的情况下发生?有冲突大概是正确的和适当的。

当 git 说 "there's a conflict" 时,这并不意味着 "you messed up, these can't be merged.",而是 "I (git) can't figure out how these changes should be merged. I need human help."

解决方法: 获得一些好的 diff/merge 软件(我在 Windows 上使用 P4Merge,但有很多选择)。检查每个有问题的提交的内容。了解冲突是什么(很可能是 H 或 I 更改了在 E 中已更改的行,或者 H 和 I 取决于已经在 F 或 G 中进行的更改)。解决每个冲突:这可能意味着保留原始行,或保留较新的行,或以包含两个分支的更改的新方式修改行 - 这完全取决于上下文。

不要害怕与团队成员协商解决冲突 - 您很可能会决定是否要删除他们的某些工作。