如何将多个提交压缩到另一个分支?

How to squash several commits to another branch?

我将在分支 dev 中开发我的应用程序,并在分支 public.

上提供“迄今为止最好的”(在 GitHub 上发布)

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

这可能吗?

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

创建并切换到 dev 的新分支。

git switch -c <new-branch>

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

git rebase -i <first-commit>

然后将所有提交设置为压缩。

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

git cherry-pick <commitSHA>

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

git rebase -i HEAD~<n+1>

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

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

git cherry-pick A^..B

其中 A 和 B 是要挑选的第一个和最后一个提交。之后重新调整它们。