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

3
我会在分支dev中开发我的应用程序,并在一个名为public的分支中提供“迄今为止最好”的版本(GitHub上发布)。
分支dev将包含提交c964dea06cf8ee396b4a39be7fdb。我想把它们压缩成一个单独的提交,在分支public上。(在分支dev上保留原样)
这种操作是否可行?
我看到了很多关于压缩提交的问题和答案,但似乎没有一个解决“压缩到另一个分支”的问题。

从概念上讲,只需将所有提交压缩成一个提交-然后将提交挑选到目标分支。或者将4个提交挑选到目标分支,然后压缩。可能有一个一行代码可以实现这个操作,但我暂时想不出来。 - TTT
我非常确定这就是你想要的:将一系列提交的Cherry-pick和Squash到子目录或子树中 - TTT
@TTT 不完全是这样 - 我想对另一个分支执行此操作。Calum的答案很准确(我需要尝试前后分支测试,但我认为这将很好)。 - WoJ
是的-我链接的问题略有不同。我应该提到被接受的答案可能是你想要的。基本上,如果你使用cherry-pick命令的-n参数,你可以避免之后的额外rebase操作。但如果Calum在这里的答案是正确的,那么也许public关键字还不存在。(我只是假设分支public已经存在,这就是为什么使用带有-n选项的cherry-pick会稍微快一些)。 - TTT
2个回答

1
dev创建并切换到一个新分支。
git switch -c <new-branch>

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

git rebase -i <first-commit>

然后将所有提交压缩成一个。

1

如果您想挑选单个提交,而它们不是按顺序排列的,那么您可能需要运行以下命令:

git cherry-pick <commitSHA>

你的特性分支上会有一系列挑选出来的提交记录。之后,你想要对这些提交记录进行交互式变基操作。
git rebase -i HEAD~<n+1>

这里的 n 是你想要挑选的提交次数。 除了最后一个提交以外,将所有提交标记为 s。 使用 "s, squash" 提交,将其合并到前一个提交中。

如果你想要挑选的所有提交都是连续的,那么做起来就更容易:

git cherry-pick A^..B

其中A和B是要挑选的第一个和最后一个提交。之后将它们变基。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接