2015-10-08 95 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