【问题标题】:Rewrite a merge commit into a squash merge commit将合并提交重写为壁球合并提交
【发布时间】:2013-10-11 07:14:46
【问题描述】:

我合并了一个长期存在的分支,但由于冲突解决,我花了一些时间来完成合并。

我发现我无法使用git-svn 发布我的工作:git svn rebase 将重新设置合并分支的所有提交,而不是提交一个合并提交。我发现git merge --squash 有点晚了……

是否可以在不丢失所有已完成的冲突解决工作的情况下将合并提交更改(rebase interractive?)合并提交为“壁球合并”提交(即不触发新的合并,因为我没有启用rerere 工具) ?

【问题讨论】:

  • 我会尝试从合并提交的第一个父级分叉一个临时分支,然后将 git cherry-pick -m 1 <merge_commit> 合并提交到它上面。如果一切正常,只需将原始分支重置为结果。
  • 在提议的git cherry-pick 通话中,请参阅this 以获取有关-m 1 的更多信息。
  • @kostix 建议的git cherry-pick -m 1 <merge_commit> 解决方案是这里最强大的解决方案,因为它还保留了提交信息。我已将其添加为下面的答案。

标签: git merge git-svn squash


【解决方案1】:

如果你已经和git merge(--no-ff)合并了,并且想把它变成一个git merge --squash的等价物,你可以使用下面的过程(假设合并提交是分支上最近的提交):

  • 确保您已签出受影响的分支。
  • git reset --hard HEAD~1 (将分支重置为合并前的提交。别担心,它不会丢失!)
  • git cherry-pick -m 1 HEAD@{1} (Cherry-选择您刚刚删除的合并提交作为正常提交,基于它与此分支之间的差异)

除了保留合并期间完成的任何冲突解决方案外,它还将保留原始合并提交信息(消息、作者、日期等),这对于修复来自生成一致提交的 BitBucket 等工具的不正确合并非常有用消息。

我们有一个仅提交 squash-commit 的策略,所以每当有人不小心从 BitBucket PR 中选择了正常的合并选项时,我都会偶尔使用它。或者单击 Slack BitBucket 机器人上令人沮丧的诱人“合并”按钮,该按钮无法让您选择合并策略...

【讨论】:

    【解决方案2】:

    也许git rebase --preserve-merges 适合你。

    这里详细回答了这样做时发生的事情:

    What exactly does git's “rebase --preserve-merges” do (and why?)

    请原谅我不喜欢从那里复制和粘贴。

    【讨论】:

    【解决方案3】:

    我遇到了类似的问题,并且能够通过简单地重置并重新提交更改来创建压缩提交。

    开始布局:

    *   06074985 (HEAD -> test1) Merge branch 'test2' into test1
    |\
    | * eb2aa088 (test2) test2 commit
    * | c83180c8 test1 commit
    |/
    * b6628265 (master) base commit
    

    git 命令: git branch temp(所以我不会丢失合并提交) git重置头~1 混帐添加。 git commit -m "壁球提交" git diff temp(只是为了确保没有任何改变)

    结束布局:

    * 5e229615 (HEAD -> test1) squash commit
    | *   06074985 (temp) Merge branch 'test2' into test1
    | |\
    |/ /
    | * eb2aa088 (test2) test2 commit
    * | c83180c8 test1 commit
    |/
    * b6628265 (master) base commit
    

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 2023-01-12
      • 2017-05-07
      • 2011-09-04
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      相关资源
      最近更新 更多