Git存储库被中断的提交破坏

时间:2018-04-16 14:21:18

标签: git git-stash git-reflog git-fsck

我通过使用 Ctrl + C 中断git commit来破坏我的本地git存储库(两次提交回来)。 我该如何解决?

git stash的输出:

$ git stash
fatal: bad revision 'HEAD'
fatal: bad revision 'HEAD'
fatal: Needed a single revision
You do not have the initial commit yet

git fsck --lost-found的输出:

$ git fsck --lost-found
notice: HEAD points to an unborn branch (Multi-Threading)
Checking object directories: 100% (256/256), done.
Checking objects: 100% (67/67), done.
error: refs/heads/Multi-Threading: invalid sha1 pointer 0000000000000000000000000000000000000000
dangling commit 2d5af11417b9508ece28c1bb1502e5299a2fa2d0
dangling commit 3b0dfd77c49c12a23469c036db7f45378a1bf740
dangling commit 47d212cf4c018b9f3544325a26c90f74d3323489
dangling commit 82674535931943f64b4a3475c14475591d84a318
dangling commit 83604cf338ccb0491081f7f27c2217bc11fba0c2
dangling blob a3133e60fe8fec7977270d1e93c0869e169024f1
dangling commit aae880196744421d1ffbf7dc23aa8965d4ee1f46
dangling blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
dangling commit f9558f1235c4a239b2c8d0677d2b1c31eb400836

git reflog的输出:

$ git reflog
fatal: your current branch 'Multi-Threading' does not have any commits yet

也无法用.git/refs/heads/Multi-Threading写一下:

$ echo 47d212cf4c018b9f3544325a26c90f74d3323489 > .git/refs/heads/Multi-Threading 
An error occurred while redirecting file '.git/refs/heads/Multi-Threading'
open: No such file or directory

2 个答案:

答案 0 :(得分:3)

中断Git并不是假设打破存储库(Git捕获键盘中断信号并优雅地处理它们),但此时,您需要弄清楚.git/refs发生了什么:

  • 它是否作为目录存在?
  • 它是否包含名为packed-refs的文件?如果是这样,请仔细使用此文件的内容。如果没有,那可能没问题。
  • 是否包含子目录headsremotes和/或tagsheads一个肯定应该存在,另外两个将在必要时创建。
  • 如果.git/refs/heads/确实存在,为什么在尝试创建名为Multi-Threading的文件时会出错?

47d212cf4c018b9f3544325a26c90f74d3323489放入名为.git/refs/heads/Multi-Threading的文件中看起来确实是一种正确的方法(虽然我不知道为什么你选择47d212cf4c018b9f3544325a26c90f74d3323489作为特定的提交使用;注意git fsck显示的那些以某种随机顺序出现;但其中一个悬挂提交可能是正确的。)

(packed-refs文件,如果存在,则包含已经打包的引用值,以便占用单个文件而不是许多单独的文件。无论它具有什么格式,一个Git喜欢。请注意,创建.git/refs/heads/<name>文件将覆盖相应的packed-refs值。)

答案 1 :(得分:1)

我的问题是由于系统错误造成的。

我重新启动,重新执行echo 47d212cf4c018b9f3544325a26c90f74d3323489 > .git/refs/heads/Multi-Threading 没有错误,它解决了我的问题。