如何在git提交失败后重用待处理的评论?

10

我使用外部编辑器来填写“git commit”的注释,如果由于某种原因提交失败,则所有注释都会消失。是否有地方存储我未能成功提交的注释?

是否有特定的git命令可以重用这些待处理注释或重复提交带有待处理注释的提交?

1个回答

12

简而言之:

  1. 运行git commit -eF .git/COMMIT_EDITMSG

或者

  1. 运行(仅一次):git config --global alias.commit-reuse 'commit -eF .git/COMMIT_EDITMSG'
  2. 每当想要重用消息时运行:git commit-reuse

如果您在外部编辑器中编写提交消息,则消息将存储在.git/COMMIT_EDITMSG中。即使提交随后失败,消息也会存储在那里。但是,下一次执行git commit时,git会将文件重置并在其中打开编辑器。

您可以使用-F选项告诉git使用现有文件的内容作为您的提交消息。在提交失败后,您可以执行git commit -F .git/COMMIT_EDITMSG,git将立即创建具有存储在该文件中的消息的提交。但是,请注意,如果这样做,注释行将包含在提交消息中

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i nor -o; assuming --only paths...
# ...

您还可以使用-e选项要求git在编辑器中打开文件。使用编辑器进行提交消息时,注释行永远不会包括在内。这也允许您在创建提交之前编辑消息。因此,在git commit失败后,只需使用git commit -eF .git/COMMIT_EDITMSG。但请注意,如果.git/COMMIT_EDITMSG不存在(例如您刚刚克隆了存储库),该命令将失败。

如果您不想记住-eF .git/COMMIT_EDITMSG选项,则可以在git中创建别名。您可以通过运行以下命令来永久添加别名:

git config --global alias.commit-reuse 'commit -eF .git/COMMIT_EDITMSG'

从现在开始,每当您想要重复使用失败提交的消息时,都可以编写git commit-reuse。如果您想再次删除别名,则可以从~/.gitconfig中删除相关行。


3
即使提交失败,最后一次提交的消息也会存储在.git文件夹下的"COMMIT_EDITMSG"文件中。 - sim
1
@sim 哇,太酷了!我认为你应该自己发布这个解决方案。 - janos
4
很遗憾,当我们需要重复使用文件COMMIT_EDITMSG时,git对其没有特殊处理,因此"git commit -e -F .git/COMMIT_EDITMSG"是最合适的选择,因为它允许编辑消息并在保存后排除注释。 - sim
1
谢谢,-e 也是个不错的选择。我更新了我的回答,虽然这当然是你自己的回答。 - janos

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