Git:恢复失败的提交消息

dev*_*oid 17 git vim

时不时地,因为我尽职尽责地制作了一个很好的描述性提交消息,我收到一个错误:

".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.
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*ilo 8

我能够结合不同的解决方案并仅使用 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
Run Code Online (Sandbox Code Playgroud)

由于太长,我们也可以定义一个别名

git config --global alias.recommit '!git commit -eF $(git rev-parse --git-dir)/COMMIT_EDITMSG'
Run Code Online (Sandbox Code Playgroud)

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

git recommit [... other commit arguments]
Run Code Online (Sandbox Code Playgroud)


小智 6

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

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

 backup
 backupdir=~/.vim/backup
Run Code Online (Sandbox Code Playgroud)

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

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

  • `ZZ`比`:x <CR>`更好 (4认同)
  • " 1: E492: 不是编辑器命令:备份行 2: E492: 不是编辑器命令:backupdir=~/.vim/backup" (2认同)