【问题标题】:How to squash several commits to another branch?如何将多个提交压缩到另一个分支?
【发布时间】:2021-11-14 10:57:25
【问题描述】:

我将在分支 dev 中开发我的应用程序,并在分支 public 上提供“迄今为止最好的”(GitHub 上的一个版本)。

分支dev 将提交c964dea06cf8ee396b4a39be7fdb我想将它们压缩为分支 public 上的单个提交(将它们原样留在分支 dev 上)。

这可能吗?

我看到了很多关于压缩提交的问题和答案,但似乎没有一个解决“压缩到另一个分支”的问题。

【问题讨论】:

  • 从概念上讲,只需压缩到一个提交中 - 然后将提交挑选到目标分支上。或者挑选 4 个提交到目标分支,然后压缩。可能有一个衬里,但我现在想不出。
  • @TTT 不完全是 - 我想对另一个分支这样做。 Calum 的答案是当场的(我需要用来回分支测试它,但我认为它会很好)
  • 是的-我链接到的问题略有不同。我应该提到,接受的答案可能就是你想要的。基本上,如果您将 -n 参数与 cherry-pick 一起使用,则可以避免之后的额外变基。但如果 Calum 在这里的回答是正确的,那么可能 public 还不存在。 (我只是假设分支public 已经存在,这就是为什么带有-n 的cherry-pick 会稍微快一些)。

标签: git git-branch git-squash


【解决方案1】:

dev创建并切换到新分支。

git switch -c <new-branch>

此时它将与dev 相同,但现在您可以在不更改dev 的情况下压缩提交。启动交互式变基。

git rebase -i <first-commit>

然后将所有提交设置为 squash。

【讨论】:

    【解决方案2】:

    如果它们不是按顺序运行,您可能希望首先挑选单个提交:

    git cherry-pick <commitSHA>
    

    您将在您的功能分支上有一系列精心挑选的提交。 之后,您想从您挑选的所有提交中对您的分支进行交互式 rebase。

    git rebase -i HEAD~<n+1>
    

    其中 n 将是精选提交的数量。 用 s 标记除最后一个之外的所有提交。 s, squash = 使用提交,但融合到之前的提交中

    如果您要挑选的所有提交都是按顺序排列的,那就更容易了:

    git cherry-pick A^..B
    

    其中 A 和 B 是第一个和最后一个被挑选出来的提交。之后重新设置它们。

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 2012-12-18
      • 2011-05-06
      • 2018-03-12
      • 2012-12-03
      相关资源
      最近更新 更多