git中的断分支,致命:您当前的分支似乎已被破坏

eir*_*ios 29 git fatal-error git-log git-branch blue-screen-of-death

这是我的情况:

  • 我在一个分支上工作.
  • 推送新的提交到遥控器.
  • 切换回主分支.

但是在打字git checkout master命令后突然我的电脑遇到蓝屏死机并且发生意外的力量关闭.在重新启动计算机后,我检查了当前分支的状态,结果我将每个文件都标记为新文件.

现在,我陷入了困境,在git log命令之后我得到了错误

$ git log
fatal: your current branch appears to be broken
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题并恢复我的分支?

我正在使用Windows 7和git bash最新版本

编辑:我不想删除此分支.

小智 34

我在Windows 7上遇到类似的问题.在我的情况下,当前的分支文件(参考./git/HEAD)\.git\refs\heads被破坏了.

我找到了.git\logs\refs\heads具有相同分支名称的当前分支的哈希码.

我.git\logs\refs\heads\xxx通过记事本打开该文件()并将第四个数字(哈希码)复制到(.git\refs\heads\xxx)来解决问题

  • 谢谢,它成功了。我将最后一次提交哈希形式 .git\logs\refs\heads\xxx 复制到 .git\refs\heads\xxx。日志中有两列哈希码,第二列的最后一项是我的最后一次提交。 (3认同)
  • 谢谢!我发现检查提交哈希以查看它是否是我想要使用“git checkout <hash>”恢复的状态也很有用(在将其复制到“git/refs/heads/xxx”之前) (2认同)
  • 谢谢伙计,它成功了。实际上我只是将 .git\logs\refs\heads\xxx 的最后一行的第二个哈希码复制到 .git\refs\heads\xxx (2认同)

Ilk*_*Cat 9

.git\refs\heads目录中的文件是您的分支.检查这些文件.它们应该只包含一个提交对象SHA-1哈希.这个哈希是你最新提交的SHA-1密钥和你的HEAD.

复制SHA-1密钥并键入

$ git cat-file -t 5917fefd485f655ab369d4e9eeda3c157c03f514
commit

$ git cat-file -p 5917fefd485f655ab369d4e9eeda3c157c03f514
tree b75cab3c54b780075b312be3e878b389a2baf904
parent 8235189aa22169295243d295fb1cc2ff2f8f7cd5
author Ilker Cat <ilker.cat@blabla.com> 1495136738 +0200
committer Ilker Cat <ilker.cat@blabal.com> 1495136738 +0200
Run Code Online (Sandbox Code Playgroud)

第二个输出是提交对象基本上包含的内容.尝试检查主分支中的提交对象是否在.git\refs\heads\master下,其树和父SHA-1密钥是否未损坏.

甚至主分支文件中的一些撇号也会导致"破碎的分支".它必须只包含最新的提交对象SHA-1哈希,而不包含任何其他内容.


waf*_*afs 6

如果尝试将分支重命名为命名空间(或文件夹)分支,则可能会遇到此错误.

如果它发生,进入目录.git/logs/refs/heads/<name>和.git/refs/heads/<name>,你会看到现在你的分支是其内部文件的文件夹.

在这两个文件夹中,将文件移出到文件夹的级别,签出该分支,删除现在空的文件夹,现在您应该能够git checkout -b <name>/<subname>无错误地执行 ,或者git branch -M <name>/<subname>.

  • 我希望我明白为什么这行得通,但确实如此。(我没有尝试重命名我的分支,我的电脑在拉动过程中崩溃了) (3认同)

rev*_*_ss 6

我通过将存储库克隆到新文件夹然后替换更改的文件来解决这个问题。似乎不是一个好的解决方案,但它是安全的!