Git扩展:压缩提交?

41

为了压缩多个提交,我一直使用:

git reset --soft HEAD~<number of commits to squash> && git commit

但是我想知道在像 Git Extensions 这样的好的 Git 客户端中是否有好的方法来做到这一点?如果可以只选择连续的提交并将它们压缩在一起,那就太棒了。


我使用TortoiseGit来完成,非常方便。 - Alexan
4个回答

74

有多种方式可以压缩(commit squash)提交记录。

以下是如何在Git Extensions中轻松将当前提交和其所有直接父提交合并为单个提交的方法:

  1. 右键单击您要压缩的提交记录,然后选择“将当前分支重置到此处”
  2. 选择“软重置”(保留已暂存文件)或“混合重置”(取消所有暂存文件)之一
  3. 如有必要,进行暂存操作
  4. 提交

以下是上述步骤的动画演示:

enter image description here


另一种方式是通过“交互式变基(interactive rebase)”来实现,可以通过命令行(git rebase -i, 阅读文档)或UI(例如Git Extensions)来完成。

在Git Extensions中执行交互式变基的步骤如下:

  1. 右键单击要压缩的提交记录,然后选择“对所选提交进行交互式变基”
  2. 在弹出的对话框中更改历史记录,例如选择要压缩或修改的提交记录
  3. 保存并关闭

以下是上述步骤的动画演示:

enter image description here


3
“软重置”更符合所要求的;) - Philippe
13
很好的回答,非常有帮助。如果可能的话,稍微减缓一下动态图会是个好主意...;-) - Pierre FABIER
2
  1. 右键单击您想要压缩的提交,并选择“将当前分支重置到此处”
  2. 选择“软重置”(保留已暂存的文件)或“混合重置”(取消所有已暂存的文件)
  3. 如有必要,请进行暂存
  4. 提交
- RussKie
1
请注意,如果您使用git add -f添加了在git ignore中的某些文件,则可能会丢失这些文件。您需要手动再次添加它们。 - asaf92
1
@PierreFABIER Chrome扩展程序可以暂停gif动画: https://superuser.com/a/1435047/930939 - RazvanR
显示剩余3条评论

20

这里是被接受答案的放慢版本


谢谢分享,我已经用你的慢版本替换了他的超快版本。 - Tim Schmelter
2
Chrome扩展程序可暂停gif动画:https://superuser.com/a/1435047/930939 - RazvanR

8

(假设您正在使用Windows)

是的,我相信TortoiseGit可以做到。作为TortoiseSVN的前用户,我会推荐它。在查看提交日志时,您可以执行以下操作:

合并多个提交上下文菜单

此外,当您使用TortoiseGit提交时,您将有选项仅修改以前的提交,因此您可以随时这样做。这样做时,它还将拉取最后一次提交消息(我在截图中出于隐私原因清除了我的消息)。

修改上次提交

当然,我相信您已经知道这一点,但不要尝试合并或修改已经推送到远程的提交,否则您的下一次推送将失败。

作为额外的奖励,当您在资源管理器中浏览工作副本时,您将获得覆盖图标的好处。

资源管理器图标


2
这比git扩展更容易。 - liang
我同意!我确实尝试过使用Git扩展,但强烈倾向于与资源管理器进行本地集成。 - BoffinBrain
但请注意,GitExtensions展示该功能的方式更类似于Git的方式。因此,如果您了解其中一个,您应该能够理解另一个... - Philippe

8
你可以通过GitExtensions的两种方法轻松实现这一点。 第一种是从GUI中进行完全相同的操作,适用于你不想使用你所看到的提交的现有提交消息的情况。
 git reset --soft HEAD~<number of commits to squash>

在GitExtensions的历史浏览器中,右键单击您想要保留的最后一次提交,并选择'reset branch to here'。然后选择'soft'选项。

 git commit

然后提交仍处于暂存状态的更改。

第二种方法是使用“rebase --interactive”:

右键单击上述描述的相同提交,并选择“rebase on”。在弹出窗口中选中“交互式”复选框。

然后,在编辑器中将提交操作设置为“squash”。在执行此操作之前,请阅读有关交互式 rebase 的好文档。当您想要编写一个由您压缩的提交消息构建而成的良好的提交消息时,此解决方案非常完美。


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