Git:恢复失败的提交消息

时间:2012-02-03 18:21:29

标签: git vim

由于我正在尽职尽责地制作nice, descriptive commit message,我得到一个错误:

".git/COMMIT_EDITMSG" 81L, 2108C written
error: There was a problem with the editor 'vim'.
Please supply the message using either -m or -F option.

请注意,这通常是在:wq之后。我检查.git/COMMIT_EDITMSG文件,它没有任何变化。是否有另一个地方git保存此消息,以便我可以恢复它并尝试再次提交?人们有这个问题的经验,知道为什么它会发生在我身上吗?我没有问题写入其他文件和权限似乎是有序的。

3 个答案:

答案 0 :(得分:6)

当你处于这种状态时,不确定COMMIT_EDITMSG上的git。如前所述,您可能会看到vim是否保存了它。但我的理解是vim的默认设置是删除备份,除非你明确告诉它保留它们。此外,如果您不希望将这些文件分散在整个目录中,则可以指定一个目录以放入它们(您可能必须先手动创建目录)。

尝试将以下两行添加到〜/ .vimrc文件中:

 backup
 backupdir=~/.vim/backup

手动创建〜/ .vim / backup目录,然后编辑文件并退出。您应该在备份目录的名称末尾看到该文件的副本带有“〜”。

另外,如果你像我一样懒惰,请使用“:x”退出vim而不是“:wq”。 “:x”同时执行写入和退出。

答案 1 :(得分:0)

我能够结合使用不同的解决方案并仅使用git来解决此问题(不取决于vim或其配置)。

在我的情况下,我还使用了带有子模块的存储库,这使其略有不同:

代替.git/.COMMIT_EDITMSG 邮件存储在.git/modules/{REPO}/COMMIT_EDITMSG

幸运的是,我们可以使用git rev-parse --git-dir告诉我们。

我们可以使用git commit -eF [FILE]从文件(-F)中获取提交消息,并编辑消息(-e)。

一起:

git commit -eF $(git rev-parse --git-dir)/COMMIT_EDITMSG

由于时间太长,我们还可以定义别名

git config --global alias.recommit '!git commit -eF $(git rev-parse --git-dir)/COMMIT_EDITMSG'

这样我们就可以这样称呼:

git recommit [... other commit arguments]

答案 2 :(得分:0)

我有一个同事遇到了同样的问题。也许 OP 正在打字

:Wq

代替

:wq

我建议退出

:x

为了避免这个问题。