2015-10-08 57 views
8

这里是我的情况:破碎分支,致命的:你当前分支似乎被打破

  • 我工作的一个分支。
  • 推送新的提交到远程。
  • 切换回主分支。

但输入git checkout master命令后,突然我的电脑遇到blue screen of death和意想不到的力量关闭发生。在开始备份计算机后,我检查了当前分支的状态,结果我将每个文件都标记为新文件。

现在,我被困在这一点上和后git log命令我得到错误

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

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

我与Windows 7和Git bash的最新版本

编辑:我不想删除该分支。

+0

文件'.git/HEAD'的内容是什么?它是否指向有效的分支名称?分支名称是否指向有效的提交散列? – knittl

回答

6

我遇到在Windows 7中类似的问题在我的情况下,当前的分支办公室文件(由./git/HEAD参考)\.git\refs\heads下被打破。

我发现打破当前分支的哈希码上.git\logs\refs\heads与同一分支的名称。

我打开通过记事本该文件(.git\logs\refs\heads\xxx)固定的问题,并复制第4号(哈希码)(.git\refs\heads\xxx

+0

.git文件夹隐藏在我的案例中,请亲自看看。 – PrakhaRaM

2

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

你应该去你退房(其中.git/目录)和

  1. 列表项编辑.git/packed-refs的根目录下;如果你看到你的分支名行然后将其删除
  2. 看在.git/refs/heads for一个您的分支命名的文件;如果你 看到一个,请删除它
+0

这样做后,它似乎只对待我的“所有文件是新的”:\ – rogerdpack

4

.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 <[email protected]> 1495136738 +0200 
committer Ilker Cat <[email protected]> 1495136738 +0200 

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

甚至您的主分支文件中的一些撇号将导致“破碎的分支”。它只能包含最新的提交对象SHA-1哈希,而不包含其他内容。

1

有一段时间它也可能由于文件权限问题而发生,请检查是否对存储库下的所有文件拥有适当的权限。

+0

是的,但在这种情况下,我是唯一的用户;拥有所有权利! – Suresh

1

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

3

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

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

在这两个文件夹中,将文件移出到文件夹的级别,检出该分支,删除现在为空的文件夹,现在您应该可以正常执行git checkout -b <name>/<subname>git branch -M <name>/<subname>

+1

保存我的一天,谢谢! – CGK

+1

不能多谢。几乎有一个迷你心脏病发作! – 22kar