【问题标题】:How to amend a commit without changing commit message (reusing the previous one)?如何在不更改提交消息的情况下修改提交(重用前一个)?
【发布时间】:2012-05-01 11:57:50
【问题描述】:

有没有办法在不弹出vi(或您的$EDITOR)的情况下修改提交并提供修改提交消息的选项,而只需重复使用之前的消息?

【问题讨论】:

  • 在艰难地了解了修改的弊端之后,我会否决自己的问题。
  • 只要你遵守一定的规则(比如不修改已经推送的内容),没有理由修改一定是坏事。
  • 修改提交不应用于在单个逻辑更改期间间歇性提交工作。为此,您应该在本地正确提交,然后在完成后 squash 提交历史记录 (@Sridhar-Sarnobat)
  • 我完全同意@DBCerigo。我发现修改有用的唯一情况是当我忘记在之前的提交中暂存文件时(例如,因为它是新文件,因此在运行 git commit -a 时不会自动暂存)并且想要追溯提交它。

标签: git commit git-commit git-amend


【解决方案1】:

git commit -C HEAD --amend 会做你想做的事。 -C 选项从另一个提交中获取元数据。

【讨论】:

  • 只是为了补充安迪的答案。如果这是您经常做的事情,那么您可以使用git config --global alias.amend 'commit --amend -C HEAD' 为其设置别名。然后您可以使用git amend 作为快捷方式。
  • 来吧,伙计们,不要偷懒,升级 git 并使用 Saggle 建议的内置命令!加一个 -C 选项。
  • 不仅是时间戳,还有作者信息!
  • @RyanCastner 实际上,您所指的评论来自 2013 年。使用我当前运行的 git 版本,--amend,即使没有任何其他选项,也确实保留了作者日期(但更改了提交日期)。因此,我删除了我的旧评论。
  • 其实这个答案在不同的方面是有价值的,即使它不是被接受的答案。与其他答案不同,您不必使用—amend。您可以创建一个新的提交,但使用与前一个提交相同的消息。这听起来可能没什么用,但默认情况下我的提交消息,当我只是保存我的工作而不必想出一个好的提交消息时,我会继续重用消息—message=“Work in progress (untested)”
【解决方案2】:

从 git 1.7.9 版本开始你也可以使用git commit --amend --no-edit 来获取你的结果。

请注意,这将不包括来自其他提交的元数据,例如对您可能重要或不重要的时间戳。

【讨论】:

  • 您还可以通过添加别名更轻松地默认使用 --no-edit 标志:“amend = commit -a --amend --no-edit”
  • @Jherico 我建议删除 -a。请进行原子提交,这样更容易审查或变基:)
  • 为什么我十年不使用 --no-edit 了?!?!谢谢:-)
  • git config --global alias.amend 'commit --amend --no-edit'
【解决方案3】:

如果您将 vi(m) 设置为 $EDITOR,则另一种(愚蠢的)可能性是 git commit --amend <<< :wq

【讨论】:

  • 即使对于这个用例来说这不是必需的,我不知道你可以通过管道连接到 vim。这开辟了一些有趣的可能性。很棒的提示。
  • ... <<< ZZ 可能打字更少;)
  • ..甚至更少 - ... <<< :x :)
  • 我不认为这是愚蠢的。这是改进任何打开 vi 的命令的工作流程的好方法。
  • 三重尖括号。这是新的。
【解决方案4】:

要扩展已接受的答案,您还可以这样做:

git commit --amend --no-edit -a

添加当前更改的文件。

【讨论】:

    【解决方案5】:

    您可以保存一个使用the accepted answeralias,这样它就可以像这样使用:

    git oops 将添加所有内容,并使用相同的消息进行修改

    git oops -m "new message"会修改替换消息


    这是别名

     oops = "!f(){ \
        git add -A; \
        if [ \"$1\" == '' ]; then \
            git commit --amend --no-edit; \
        else \
            git commit --amend \"$@\"; \
        fi;\
    }; f"
    

    【讨论】:

      【解决方案6】:

      只是为了增加一些清晰度,您需要使用 git add 暂存更改,然后修改最后一次提交:

      git add /path/to/modified/files
      git commit --amend --no-edit
      

      如果您忘记在上次提交中添加一些更改,或者当您想添加更多更改而不通过重用上次提交来创建新提交时,这尤其有用。

      【讨论】:

        猜你喜欢
        • 2011-07-09
        • 1970-01-01
        • 2012-05-09
        • 2021-02-15
        • 1970-01-01
        • 1970-01-01
        • 2012-01-28
        • 2011-04-25
        • 1970-01-01
        相关资源
        最近更新 更多