直到一分钟前,我有一个Git repo,其中最后一次提交有一个空提交消息。我通过用git rebase -i
压缩一个新的提交来填充它(我原本计划修改内容)但我仍然想知道是否有一种正确的方法来填写空提交消息。
我试过
git commit --amend
但是那不起作用,然后我试了
git rebase -i HEAD^
和reword
。两次尝试都导致Git说
fatal: commit has empty message
然后退出。
编辑:澄清一下,最终有效的是
# change some stuff
git commit
git rebase -i HEAD~2
# squash the last two commits
但这似乎是一个黑客。
答案 0 :(得分:8)
这似乎是一个尚未修复的bug(虽然有针对它提出的补丁)。作为解决方法,您可以在命令行上提供消息:
git commit --amend -m "foo"
答案 1 :(得分:3)
如果您需要编辑上次提交(HEAD)消息,请使用git commit --amend -m 'new message'
$ git commit --allow-empty --allow-empty-message -m ''
[master 5db8236]
$ git commit --amend
fatal: commit has empty message
$ git commit --allow-empty --amend -m 'new message'
[master d383d5c] new message
请记住,我正在使用--allow-empty
强制git commit
创建一个空提交,--allow-empty-message
强制git commit
创建一个空消息提交。< / p>
答案 2 :(得分:3)
启动git 2。0。1(2014年6月25日),当您进行rebase并尝试放置一个空提交消息时,git不会再抱怨空提交消息。
见Jeff King (peff
)
commit
:不要抱怨来自-C
当我们选择另一个提交的消息时,如果我们发现它是空的并且我们不打算运行编辑器(即运行“
die()
”而不是“{{1}时,我们立即-C
}}“)。
但是,这项检查是多余且有害的。这是多余的,因为在我们运行编辑器之后,我们已经注意到空信息,然后死在那里(正如我们对常规而非“
-c
”情况一样, 用户在编辑器中提供了一条空消息。这有害于几个原因:
- 不尊重
-C
。 因此,“--allow-empty-message
”无法“选择”此类提交 因此,您甚至无法及时通过“git rebase -i
”或“reword
”指示进行修复。- 除了编辑器之外,它没有考虑修改消息的其他方式 例如,“
edit
”可以从空提交中获取作者信息,但是向其添加消息 还有更多工作要做,以便正常工作(现在我们明确禁止“git commit -C empty-commit -m foo
与-C
”),但这会删除一个包版广告。- 现有的检查不足以防止段错误 我们尝试在提交中找到“
醇>-m
”标题/正文边界。如果它在字符串的末尾(即没有正文),或,如果我们根本找不到它(即截断的提交对象),我们认为该消息为空。
使用“\n\n
”,这没关系;在任何一种情况下我们-C
。但是对于“die
”,我们继续,并且在截断提交的情况下可能最终取消引用-c
。
注意:使用Git 2.19,NULL+2
默认使用git rebase
请参阅“Rebasing a git history with empty commit messages”。