我正处于承诺的中间。我在vim中输入了我的提交消息。我现在想起我需要改变一些东西。我意识到还有其他选择可以实现我想要的,但我想知道是否有一种方法可以中止提交但仍保存到目前为止我输入的提交消息。
是。将提交消息写入另一个文件(:w /some/other/path.txt
)。然后退出编辑器而不保存(:q!
)。如果您以前将文件保存到其原始路径,请先删除所有内容并写入空文件(空提交消息将中止提交)。
现在,当您准备提交“for reals”时,请使用您在备用路径中保存的消息文件。
或者,将提交消息复制到vim的一个缓冲区中。
值得注意的是,你根本不需要这样做:commit --amend
允许你在提交之后改变提交,因此简单的解决方案是使用你所拥有的东西生成提交,然后在推送之前修复它。您甚至可以在破坏状态下完成提交,reset HEAD~
(将您重置为提交前工作副本所处的状态),修复您的工作副本,然后commit -a -c HEAD@{1}
使用旧的提交消息。
如果你的编辑器可以退出错误代码 - Git将中止提交。使用VIM时,请键入
:cq
以非零错误代码退出并中止提交。
如果您打开vim来编写提交消息,只需删除不以#开头的行,git将中止您的提交
Aborting commit due to empty commit message.
虽然您可以中止提交,但另一种方法是在之后修改提交。只需提交您当前的工作,然后进行任何您想要的更改,git add
,然后运行git commit --amend
。您将被放回到提交消息编辑器中,当您保存时,将修改提交以包括其他更改和新的提交消息。
是的,这是可能的。为了提交,您的编辑器必须将提交消息写入文件.git/COMMIT_EDITMSG
并以0状态代码退出。
因此,如果您正在使用VI / VIM,您可能需要执行以下操作...
:w
保存提交消息(默认情况下,这会将当前内容保存到.git/COMMIT_EDITMSG
):cq
git commit -eF .git/COMMIT_MESSAGE
编辑现有的提交消息-F /path/to/file
将使用/ path / to / file中的任何给定内容填充编辑器。但是,默认情况下,这将立即执行提交,除非您另外提供-e
标志进行编辑。
@bdonlan的答案对这个问题很有帮助,但我会指出你可能想要一个更好的解决方案的情况。
假设您要将更改添加到上次提交。所以你这样做@bdolan建议:
git add files
git commit --amend
想象一下,在编写新消息时,您很遗憾将这些文件添加到该提交中。问题是您已经遇到已保存的提交消息并退出编辑器(有或没有保存)将这些更改添加到上次提交。在这些行动之前回到你所处的位置需要你split the last commit - 我敢打赌你想避免它。
诀窍是保存并退出编辑器,因为它只有以#
开头的行或根本没有行。当您退出时,您将收到以下消息:
Aborting commit due to empty commit message.
而你根本没有改变最后的提交。