Answers:
是。将提交消息写入另一个文件(:w /some/other/path.txt)。然后退出编辑器而不保存(:q!)。如果您以前将文件保存到其原始路径,请删除所有内容并首先写入空文件(空提交消息将中止提交)。
现在,当您准备提交“ for reals”时,请使用保存在备用路径上的消息文件。
或者,将提交消息复制到vim的缓冲区之一中。
值得注意的是,您实际上根本不需要执行此操作:commit --amend让您在完成提交后更改提交,因此简单的解决方案是使用您所拥有的内容生成提交,然后在推送之前对其进行修复。您甚至可以在断线状态下完成提交,reset HEAD~(将您重置为提交之前工作副本所处的状态),修复工作副本,然后commit -a -c HEAD@{1}使用旧的提交消息。
write the empty file (an empty commit message will abort the commit)像魅力一样工作,谢谢!
如果您的编辑器可以退出并显示错误代码-Git将中止提交。使用VIM时,键入
:cq
以非零错误代码退出并中止提交。
commit --amend否则您将不得不删除现有的提交消息和:wq。
git commit --amend而不是git rebase --continue在重新定基期间拯救了我的性命。
如果打开了vim来编写提交消息,只需删除不以#开头的行,git就会中止提交
Aborting commit due to empty commit message.
ggdG将剪切消息的所有内容,然后在下次运行时,vim您只能P剪切先前剪切的文本。
是的,有可能。为了提交,您的编辑者必须将提交消息写入文件.git/COMMIT_EDITMSG并以0状态代码退出。
因此,如果您使用的是VI / VIM,则可能需要执行以下操作...
:w(默认情况下,这会将当前内容保存到.git/COMMIT_EDITMSG):cqgit commit -eF .git/COMMIT_MESSAGE在-F /path/to/file将填充与/路径/任何给定的内容/文件编辑器。但是,默认情况下,这将立即执行提交,除非您-e另外提供用于编辑的标志。
/foo/bar/目录中,即相对于项目根目录的相对路径),例如git commit -eF ../../.git/COMMIT_MESSAGE
:w做:sav committmp和git commit -eF committmp
@bdonlan答案非常适合这个问题,但我会指出您可能需要更好解决方案的情况。
假设您要向上一次提交添加更改。因此,您按照@bdolan的建议进行操作:
git add files
git commit --amend
想象一下,在编写新消息期间,您后悔将这些文件添加到该提交中。问题是您被已经保存的提交消息所困扰,退出编辑器(保存或不保存)会将这些更改添加到最后的提交中。返回到执行这些操作之前的位置时,您需要拆分上一次提交 -我敢打赌您想避免它。
诀窍是在仅以行开头#或根本没有行的情况下保存并退出编辑器。退出时,您会收到以下消息:
Aborting commit due to empty commit message.
而且您根本没有更改最后的提交。
git commit; vim ....; git commit --amend; git reset HEAD@{1}。那就是:如果我要“撤销”的修正,那我就不会有分裂一次提交。修改之前为HEAD的提交对象另存为HEAD@{1}。另外,Zetta已经建议删除所有非注释行。