时不时地,因为我尽职尽责地制作了一个很好的描述性提交消息,我收到一个错误:
".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保存此消息,以便我可以恢复它并尝试再次提交?人们有这个问题的经验,知道为什么它会发生在我身上吗?我没有问题写入其他文件和权限似乎是有序的.
我能够结合不同的解决方案并仅使用 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"同时执行写入和退出.