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

时间:2015-10-08 10:15:15

标签: git git-branch fatal-error git-log blue-screen-of-death

以下是我的案例:

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

但是在键入git checkout master命令后突然我的计算机遇到了blue screen of death并且发生了意外的强制关闭。在重新启动计算机后,我检查了当前分支的状态,结果我将每个文件都标记为新文件。

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

$ git log
fatal: your current branch appears to be broken

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

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

  

修改:我不想删除此分支。

10 个答案:

答案 0 :(得分:20)

我在Windows 7上遇到了类似的问题。就我而言,./git/HEAD下的当前分支文件(由\.git\refs\heads引用)已被破坏。

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

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

答案 1 :(得分:8)

.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

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

即使主分支文件中的一些撇号也会导致“断开的分支”。它必须只包含最新的提交对象SHA-1哈希,而不包含任何其他内容。

答案 2 :(得分:6)

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

如果发生这种情况,请转到目录.git/logs/refs/heads/<name>.git/refs/heads/<name>,您将看到您的分支现在是一个文件夹,里面有文件。

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

答案 3 :(得分:2)

您的分支名称现在可能包含一些特殊字符或类似字符。

您应该转到结帐的根目录(.git/目录所在的位置)和

  1. 列出项目编辑.git/packed-refs;如果您看到包含您的分支名称的行,则将其删除
  2. .git/refs/heads for中查找以您的分支命名的文件;如果你 看一个,删除它

答案 4 :(得分:2)

有些时候也可能由于文件权限问题而发生,请检查您是否对存储库下的所有文件具有适当的权限。

答案 5 :(得分:1)

有同样的问题。 删除.git \ refs \ heads \为我解决了这个问题。

答案 6 :(得分:1)

在使用记事本打开以.git\logs\refs\heads\<MY-CORRUPTED-BRANCH>找到的我的分支名称后命名的文件的情况下,可能是空的。所以我删除了它。

并运行以获取最新提交

git reflog

4404dd7 HEAD @ {0}:提交:更新自述文件

然后我跑

git reset --hard 4404dd7 

HEAD现在位于4404dd7更新自述文件

分支又回来了。 注意

这可能会使您的分支有所分歧。因此,您稍后可能需要修复它们。

4404dd7是我在该分支机构中的最新提交,我不知道这是否是正确的解决方案,但这对我还是有用的。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

我有同样的问题。我刚刚删除了.git/refs/heads中的所有文件, 然后我尝试编辑我的文件之一,以便git接受提交。然后,当我推送文件时,出现此错误:

10:47推送被拒绝 推送已取消,因为更新期间存在冲突。 检查冲突是否已正确解决,然后再次调用push。

但是,我通过合并文件时接受rebase选项解决了这一问题,没有冲突。

答案 9 :(得分:0)

好的,这个问题,我发现, 如果您返回并克隆您的存储库,您只需从新存储库复制 .git 文件夹并替换旧存储库中的 .git 文件夹。

剩下的就是历史:运行 git add 。然后 git commit 和 push。