【问题标题】:Cherry-pick commit with its merge commit without solving conflictCherry-pick 提交及其合并提交而不解决冲突
【发布时间】:2020-03-12 17:58:15
【问题描述】:

这是我的情况:

├── (c0) ── (c1) ── (c2-merge-commit) ── (b0)── (b1-merge-commit)

我想将 c0、c1 和 c2 合并到一个提交中并有这个:

├──(压扁:c0,c1,c2-merge-commit)──(b0)──(b1-merge-commit)

所以我把我的 HEAD 带到 c2,然后回到 c0 并 squash 合并到 c2 (HEAD@{1})

git merge --squash HEAD@{1}

这部分进行得很好,我有:

├──(压扁:c0,c1,c2)

现在我需要添加 2 个提交 (b0) 和 (b1-merge-commit)。我使用了cherry-pick,但在那种情况下我需要解决b0的冲突。但我不想再次解决冲突,因为我实际上是使用 (b1-merge-commit) 解决的。

作为一种解决方案;我首先将 b0 和 b1 压缩为新的提交;然后在上面挑选这个(压扁:c0、c1、c2)。但显然,如果我将 +10 次提交压缩到过去,并且有如此多的合并提交飞来飞去,那么这个解决方案显然无法扩展。

TLDR: 我想在我的分支上进行两次提交;其中之一是具有冲突的实际更改(b0),另一个是实际解决冲突的合并提交。当我一一挑选时,git 要求我处理 b0 的冲突,其中冲突实际上通过 b1 上的合并提交解决。我只能设法将 b0 和 b1 压缩到一个新的提交中,然后在我的分支上挑选它。

【问题讨论】:

    标签: merge git-merge cherry-pick git-cherry-pick


    【解决方案1】:

    到目前为止,我可以找到两种方法,但没有一种方法能提供我想要的。但至少我不需要再次解决冲突。

    第一个,,因为它已经在问题中提到过。 我在另一个分支中对 b0 和 b1 进行了挤压。转回原来的分支,然后挑选压扁的 b0 和 b1:

    ├── (squashed : c0, c1, c2)-(squashed: b0, b1)
    

    第二个, cherry-pick 直接合并提交: 这个更快更简单。

    $> git cherry-pick -m 1 <hash-b1>
    

    分支现在看起来像这样:

    ├── (squashed : c0, c1, c2)-(b1-merge-commit)
    

    【讨论】:

      猜你喜欢
      • 2012-03-11
      • 2018-12-08
      • 2012-05-21
      • 1970-01-01
      • 2016-04-11
      • 2021-07-28
      • 2016-01-08
      • 2021-01-18
      • 2021-05-21
      相关资源
      最近更新 更多