如何修改提交而不更改提交消息(重用前一个)?

Sri*_*bat 590 git commit git-amend git-commit

有没有办法修改提交没有vi(或你$EDITOR)弹出修改提交消息的选项,但只是重用前一条消息?

Sha*_*gie 909

从git 1.7.9版本开始,您也可以使用它git commit --amend --no-edit来获得结果.

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

  • 您还可以通过添加别名来更容易默认为--no-edit标志:"amend = commit -a --amend --no-edit" (36认同)
  • `git config --global alias.amend 'commit --amend --no-edit'` (22认同)
  • @oyalhi号.它将使用相同的消息进行新的提交. (8认同)
  • @Jherico我建议删除-a。请进行原子提交,这样审查或变基更容易:) (5认同)
  • 为什么我十年没有使用 --no-edit 了?!?!谢谢 :-) (4认同)
  • “不会包含来自其他提交的元数据”是什么意思?据我所知,它的行为与不使用“--no-edit”运行然后仅保存提交消息时的行为相同。它保留“AuthorDate”,并更新“CommitDate”。 (3认同)

And*_*oss 112

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

  • 只是为了增加安迪的答案.如果您经常这样做,那么您可以使用`git config --global alias.amend'commit --amend -C HEAD'`为它设置别名.然后你可以使用`git amend`作为捷径. (12认同)
  • 来吧,伙计们,不要偷懒,升级git并使用Shaggle建议的内置命令!另外一个用于-C选项. (9认同)
  • 不仅是时间戳,还有作者信息! (4认同)
  • @RyanCastner的确,您所指的评论是从2013年开始的.使用我目前正在运行的git版本,`--amend`,即使没有任何其他选项,也会保留作者日期(但会更改提交日期).因此,我删除了旧的评论. (2认同)
  • 实际上,即使这个答案不是公认的答案,它也以不同的方式有价值。与其他答案不同,您不必使用`-amend`。您可以创建一个新的提交,但使用与前一个提交相同的消息。这听起来可能没什么用,但是默认情况下我的提交消息,当我只是保存我的工作而不必想出一个好的提交消息时,我一直重复使用该消息`-message="Work in progress (untested)"` (2认同)

gal*_*lva 56

另一个(愚蠢的)可能性是,git commit --amend <<< :wq如果你有vi(m)as $EDITOR.

  • 即使这个用例没有必要,我也不知道你可以通过vim进行操作.这开辟了一些有趣的可能性.很棒的提示. (34认同)
  • 三角支架.这是新的. (11认同)
  • `... <<< ZZ`可能更少打字;) (5认同)
  • ..甚至更少 - "...... <<<:x` :) (5认同)
  • 我不认为这很愚蠢.这是改善打开vi的任何命令的工作流程的好方法. (3认同)

alj*_*gom 16

我使用的别名使用了已接受的答案。然后可以使用这个命令:

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"
Run Code Online (Sandbox Code Playgroud)


pio*_*son 12

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

git add /path/to/modified/files
git commit --amend --no-edit
Run Code Online (Sandbox Code Playgroud)

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


vin*_*nce 7

我看到问题已经得到解答,但如果您想像一台高效的机器一样添加、提交和推送,您可以将所有命令添加在一起并在一行中完成。

git add .; git commit --amend --no-edit; git push --force
Run Code Online (Sandbox Code Playgroud)

现在,当您每次提交只做一些小的更改时,您只需按下即可UP一次性完成所有操作。

希望这对某人有帮助:)

注意:这不是使用 git 的干净方式,只有当您经常进行小的更改时我才会推荐它。例如,始终adding使用.(所有更改)可能会导致您暂存您甚至不想添加的更改,这可能会导致commit.

编辑:--force如果您要修改的提交已经在远程存储库中,您将需要添加到您的推送命令中


Ram*_*ino 6

要扩展接受的答案,您还可以执行以下操作:

git commit --amend --no-edit -a
Run Code Online (Sandbox Code Playgroud)

添加当前更改的文件。