【问题标题】:Easy way to Git squash?Git 壁球的简单方法?
【发布时间】:2012-04-10 21:11:35
【问题描述】:

我经常这样做:

git add -u
git commit

...发现错误,修复它...

git add -u
git commit -m "Fix typo"

有没有一种简单的方法可以将第二次提交压缩回第一次?有时我可以使用git rebase -i 来做到这一点,但有时我只是收到一条关于更新的消息。

请注意,我只是在谈论我没有推送第一次提交的情况。基本上我想使用第一条日志消息,但要结合两次提交的效果。我可以使用git commit --amend 来处理这些事情吗?

这个相关的问题处理了这个: git: squash/fixup earlier commit

最好的答案是一岁,我想知道情况是否有所改善?

【问题讨论】:

    标签: git git-rebase


    【解决方案1】:

    这正是git commit --amend 的用途。鉴于您的示例,您需要做的就是将 --amend 标志添加到您的第二次提交:

    git add -u
    git commit
    

    ...发现错误,修复它...

    git add -u
    git commit --amend
    

    您也可以在 git gui 中直观地执行此操作(有一个单选框可以在“新提交”和“修改上次提交”之间切换)

    【讨论】:

    • 有趣 - 不知道 git gui。我想知道为什么会有那个和 gitk。 (争夺丑陋的奖品?:p)
    • 这两个用途不同:git gui 用于提交,gitk 用于查看和管理分支。请注意,您可以从gitk 开始git gui,反之亦然。
    【解决方案2】:

    我发现最好的是这篇文章,它讨论了 git 1.7 中引入的 autosquash 功能。

    http://technosorcery.net/blog/2010/02/07/fun-with-the-upcoming-1-7-release-of-git-rebase---interactive---autosquash/

    【讨论】:

      【解决方案3】:

      是的,你可以修改之前的提交。

      git add typointhisfile
      git commit -vm
      

      或者,如果您已经创建了 2 个提交 - 您可以将它们设为一个:

      git rebase -i HEAD~2
      

      只需将其中一个压入另一个即可。

      不过,您最好 (IMO),首先防止问题发生。为此,我建议始终进行详细提交:

      git commit -v
      

      在编写提交消息之前 - 浏览一下您将要提交的更改的差异,如果您看到需要更正的内容,请关闭您的编辑器。关闭而不输入提交消息将中止提交。

      养成习惯,纠正错字的需要就会消失。

      【讨论】:

      • 是的。我实际上做了很多视觉检查(特别是 git diff --cached)。还是很容易错过东西。当然,您应该经常提交。所以在一切都完美之前推迟提交是没有意义的......
      • 经常犯和犯错误是两件事@SteveBennett
      猜你喜欢
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 2012-06-10
      • 2014-07-27
      相关资源
      最近更新 更多