【发布时间】:2012-02-05 04:26:03
【问题描述】:
我正在提交。我已经在 vim 中输入了我的提交信息。我现在记得我需要改变一些东西。我意识到还有其他选择可以完成我想要的,但我想知道是否有办法中止提交但仍然保存我到目前为止输入的提交消息。
【问题讨论】:
标签: git
我正在提交。我已经在 vim 中输入了我的提交信息。我现在记得我需要改变一些东西。我意识到还有其他选择可以完成我想要的,但我想知道是否有办法中止提交但仍然保存我到目前为止输入的提交消息。
【问题讨论】:
标签: git
如果您的编辑器可以退出并显示错误代码——Git 将中止提交。使用 VIM 时,键入
:cq
以非零错误代码退出并中止提交。
【讨论】:
commit --amend的技巧,否则你将不得不删除现有的提交消息和:wq。
git commit --amend 而不是 git rebase --continue 时救了我的命。
是的。将提交消息写入不同的文件 (:w /some/other/path.txt)。然后退出编辑器而不保存 (:q!)。如果您之前将文件保存到其原始路径,请删除所有内容并先写入空文件(空提交消息将中止提交)。
现在,当您准备好“真正地”提交时,请使用您保存在备用路径中的消息文件。
或者,将提交消息复制到 vim 的缓冲区之一。
值得注意的是,您真的根本不需要这样做:commit --amend 允许您在提交完成后更改它,因此简单的解决方案是使用您的内容生成提交'已经得到然后在推动之前修复它。您甚至可以在其损坏的状态下完成提交,reset HEAD~(将您重置为您的工作副本在提交之前的状态),修复您的工作副本,然后 commit -a -c HEAD@{1} 使用旧的提交消息。
【讨论】:
write the empty file (an empty commit message will abort the commit) 部分工作就像一个魅力,谢谢!
如果您打开 vim 来编写提交消息,只需删除不以 # 开头的行,git 将中止您的提交
Aborting commit due to empty commit message.
【讨论】:
ggdG 将剪切邮件的所有内容,然后下次运行 vim 时,您可以只 P 之前剪切的文本。
虽然您可以中止提交,但另一种方法是在之后修改提交。只需提交您当前的工作,然后进行您想要的任何其他更改,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 中的任何给定内容填充编辑器。但是,默认情况下,这会立即执行提交,除非您另外为 editing 提供 -e 标志。
【讨论】:
git commit -eF ../../.git/COMMIT_MESSAGE
:w 做:sav committmp 和git commit -eF committmp
我通常使用提供的终端在IntelliJ 内进行提交。不幸的是,我的提交是手动的:
git commit -m'my message' // etc
所以我认为唯一安全的做法就是关闭终端窗口!如果要保存文本,只需突出显示文本,然后复制,然后关闭终端窗口。 p>
【讨论】:
@bdonlan 的回答非常适合这个问题,但我会指出您可能需要更好的解决方案的情况。
假设您想对上次提交添加更改。所以你按照@bdolan 的建议去做:
git add files
git commit --amend
想象一下,在编写新消息期间,您后悔将这些文件添加到该提交中。 问题是您遇到了已保存提交消息,退出编辑器(有或没有保存)会将这些更改添加到最后一次提交。恢复到您在这些操作之前所处的位置需要您 split the last commit - 我敢打赌您想避免它。
诀窍是在编辑器只有以# 开头的行或根本没有行时保存并退出编辑器。当您退出时,您会收到以下消息:
Aborting commit due to empty commit message.
而且您根本没有更改最后一次提交。
【讨论】:
git commit; vim ....; git commit --amend; git reset HEAD@{1}。也就是说:如果我想“撤消”修改,那么我确实不必须拆分先前的提交。修改前为 HEAD 的提交对象保存为HEAD@{1}。此外,zetta 已经建议删除所有非注释行。