为了压缩多个提交,我一直使用:
git reset --soft HEAD~<number of commits to squash> && git commit
但是我想知道在像 Git Extensions 这样的好的 Git 客户端中是否有好的方法来做到这一点?如果可以只选择连续的提交并将它们压缩在一起,那就太棒了。
为了压缩多个提交,我一直使用:
git reset --soft HEAD~<number of commits to squash> && git commit
但是我想知道在像 Git Extensions 这样的好的 Git 客户端中是否有好的方法来做到这一点?如果可以只选择连续的提交并将它们压缩在一起,那就太棒了。
有多种方式可以压缩(commit squash)提交记录。
以下是如何在Git Extensions中轻松将当前提交和其所有直接父提交合并为单个提交的方法:
以下是上述步骤的动画演示:
另一种方式是通过“交互式变基(interactive rebase)”来实现,可以通过命令行(git rebase -i
, 阅读文档)或UI(例如Git Extensions)来完成。
在Git Extensions中执行交互式变基的步骤如下:
以下是上述步骤的动画演示:
(假设您正在使用Windows)
是的,我相信TortoiseGit可以做到。作为TortoiseSVN的前用户,我会推荐它。在查看提交日志时,您可以执行以下操作:
此外,当您使用TortoiseGit提交时,您将有选项仅修改以前的提交,因此您可以随时这样做。这样做时,它还将拉取最后一次提交消息(我在截图中出于隐私原因清除了我的消息)。
当然,我相信您已经知道这一点,但不要尝试合并或修改已经推送到远程的提交,否则您的下一次推送将失败。
作为额外的奖励,当您在资源管理器中浏览工作副本时,您将获得覆盖图标的好处。
git reset --soft HEAD~<number of commits to squash>
在GitExtensions的历史浏览器中,右键单击您想要保留的最后一次提交,并选择'reset branch to here'。然后选择'soft'选项。
git commit
然后提交仍处于暂存状态的更改。
第二种方法是使用“rebase --interactive”:
右键单击上述描述的相同提交,并选择“rebase on”。在弹出窗口中选中“交互式”复选框。
然后,在编辑器中将提交操作设置为“squash”。在执行此操作之前,请阅读有关交互式 rebase 的好文档。当您想要编写一个由您压缩的提交消息构建而成的良好的提交消息时,此解决方案非常完美。