git:在input消息中间中止提交
我正在提交。 我在vim中input了我的提交信息。 我现在记得我需要改变一些东西。 我意识到,还有其他的select来完成我想要的,但我想知道是否有一种方法来中止提交,但仍保存我迄今为止input的提交信息。
是。 将提交消息写入不同的文件( :w /some/other/path.txt
)。 然后退出编辑器而不保存( :q!
)。 如果您以前将文件保存到其原始path,则删除所有内容并首先写入空文件(空提交消息将中止提交)。
现在,当您准备好提交“reals”时,使用您在备用path中保存的消息文件。
或者,将提交消息复制到vim的缓冲区中。
值得一提的是,你根本不必这么做 : commit --amend
可以让你在提交之后改变提交,所以简单的解决方法是用你已经得到的提交进行提交,然后在推送之前修复它。 你甚至可以完成提交到其中断状态, reset HEAD~
(重置你的工作副本在提交之前的状态),修复你的工作副本,然后commit -a -c HEAD@{1}
以使用旧的提交消息。
如果你的编辑器可以退出一个错误代码 – Git将中止提交。 使用VIM时,input
: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的回答对于这个问题是很好的,但是我会指出你可能想要一个更好的解决scheme。
假设你想添加对上次提交的更改。 所以你做@bdolanbuild议:
git add files git commit --amend
想象一下,在写新消息的时候,你后悔把这些文件添加到那个提交。 问题是你被一个已经保存的提交信息卡住,退出编辑器(有或没有保存)会将这些变化添加到最后一次提交。 恢复到这些操作之前的位置需要您分割最后的提交 – 我敢打赌,您希望避免它。
诀窍是保存并退出编辑器,而它只有以#
开始的行或根本没有行。 当您退出时,您将收到以下信息:
Aborting commit due to empty commit message.
而且你还没有改变最后的提交。