101

コンピューターが停止し、git リポジトリの 1 つが壊れています。マスターをチェックアウトしようとすると、次のように表示されます。

warning: ignoring broken ref refs/heads/master.
error: Your local changes to the following files would be overwritten by checkout:
        com.vainolo.jdraw2d.releng.p2/pom.xml
Please, commit your changes or stash them before you can switch branches.
Aborting

実行すると、次のようgit stashになります。

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

それで、なにかお手伝いできますか?

の出力を更新git reflog:

fatal: bad default revision 'HEAD'

あまり有望ではありません...の出力git fsck

error: Invalid HEAD
Checking object directories: 100% (256/256), done.
error: unable to unpack 59551f96b4e87a1c14293c19eb548ce6fa1f196f header
error: inflateEnd: stream consistency error (no message)
fatal: loose object 59551f96b4e87a1c14293c19eb548ce6fa1f196f (stored in .git/objects/59/551f96b4e87a1c14293c19eb548ce6fa1f196f) is corrupt
4

19 に答える 19

181

私はなんとか回復しました:

rm .git/refs/remotes/origin/HEAD
git fetch --all
于 2016-03-10T04:47:35.777 に答える
26

壊れた git リポジトリの回復で提案されている手順に従って開始します。

  • .git/refsまだ有用なものが含まれているかどうかを確認します
  • または最後にいたブランチの内容を確認git reflogして失敗する.git/logs/refs/heads/master
  • run git fsck、場合によっては--unreachableまたは--lost-found

masterこれにより、 ref がどうあるべきかを理解し、それを復元できるようになることを願っています (つまり、正しい SHA1 を に cat します.git/refs/heads/master)。

HEADそのコミットに含まれるオブジェクトが本当に破損している場合、残念ながらコミットを復元することはできません。作業ツリーおよび/またはインデックスが無傷であると仮定すると、前のコミットに対して a git reset --soft(または a に失敗git reset) を試してから、コミットをやり直すことができます。git checkout -f作業ツリー saまたはを変更する操作は避けてくださいgit reset --hard

于 2013-03-09T23:39:07.303 に答える
6

変更されたファイルがあまりない場合、この問題を解決する便利な方法は次のとおりだと思います。

  1. リポジトリで変更したファイルをバックアップします
  2. 既存のリポジトリを削除する
  3. サーバーから再クローンします
  4. ステップ 1 のファイルをリポジトリに貼り付け、git commit -a
于 2013-03-10T10:55:18.740 に答える
5

計算されたフリーズとクラッシュの後、私の git ブランチは次のメッセージで破損しました: git fatal: your current branch appears to be broken. 私は何もできませんでした。

やっgit fsckた後、ブランチにはerror: Invalid HEAD. refs/heads/<branch>を持っていたinvalid sha1 pointer

ここのオプションに従って、.git/refs/heads/<branch>notepad++ エディターで開いたところ、各 sha1 文字はNUL.

幸いなことに、ブランチをリモート状態にリセットするだけで済み、それは bitbucket リポジトリ上にありました。リモートレポの先端からsha1を取得し、.git/refs/heads/<branch>保存したものにコピーしてからgit reset --hard HEAD、すべてを正常に戻しました。

于 2017-10-04T14:16:08.590 に答える
3

参照をロックできないというエラーのため、マスター ブランチをチェックアウトできませんでした。私は削除してしまいました: .git/refs/remotes/origin/HEAD .git/refs/remotes/origin/master

そして、この git コマンドを呼び出します:

git fetch --all
于 2017-07-19T00:16:16.147 に答える
2

プッシュするのを忘れるほど馬鹿だったので、コミットの実行中にコンピューターがクラッシュしました。.git/logs/refs/heads/ を開くことで、最後のコミットを除くすべてを回復できました

このファイルには、ブランチへのすべてのコミット (SHA を含む) が含まれています。回復するために行ったことは次のとおりです。

  • 最新の変更を一時フォルダーにバックアップする
  • 「白紙の状態」に移行する
    • git checkout master
    • git reset --hard
  • ログの最後から 2 番目のコミットをチェックアウトする
  • この切り離された頭から枝を作る
  • 押す
  • 最新の変更を復元する
  • 再度コミット

そのため、ばかげた間違いを犯した場合でも、git を使用した 1 日の作業にすぐに取り戻されることはありません :)

于 2016-08-03T08:59:54.587 に答える
1

Android Studioが突然終了したとき(コンピューターの電源が失われたため)、同じ問題が発生しました。

C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\heads\masterファイルの内容を自分のファイルにコピーすることで解決しましたC:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\remotes\origin\master

(以前は、Android Studio で「Force Push」オプションもオンにしていましたが、これは必要な手順ではなかったと思います。)

ノート:

私のC:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\ディレクトリ(サブディレクトリを含む)内のファイルの内容を、別の健全なプロジェクト内の対応するファイルと比較することで、この解決策を見つけましC:\Users\myusername\AndroidStudioProjects\MyHealthyApp\.git\た。

別のファイルが破損している可能性がありますが、別の正常なプロジェクトと比較することで、何が問題なのかをすぐに特定できるはずです。

git が構成された別の正常なプロジェクトがない場合は、壊れたプロジェクトを作成したのと同じ方法で簡単なプロジェクトを作成して、調査、比較、修正などを行う価値があるかもしれません。

PS - 私のエラー メッセージ (編集済み) は次のとおりです。warning: ignoring broken refs/remotes/origin/master.fatal bad revision 'refs/remotes/origin/master..refs/heads/master' during executing git -c core.quotepath=false log refs/remotes/origin/master..refs/heads/master --pretty=format --encoding=UTF-8 -M --name-status -c --

于 2016-07-07T12:16:45.347 に答える
1

応答が遅すぎることはわかっていますが、origin/head. を実行すると、これを確認できますgit branch -r。リモートオリジンを指していない場合はorigin/head、 を実行して設定できますgit remote set-head origin {{your branch name}}

もう一度実行git branch -rすると、次のように表示されます。 origin/HEAD -> origin/develop

これが、この問題に遭遇している他の人の助けになることを願っています。

于 2017-06-13T18:39:20.033 に答える
0

MSWindows が作成した desktop.ini ファイルが git を悩ませているかどうかを確認しますか? それは私のために行います。.git ディレクトリのサブフォルダーでそれらをすべて削除すると、機能します。

于 2016-06-05T14:02:16.367 に答える
0

私は同じ問題を抱えていましたが、運が悪く、問題を理解できませんでした。私はレポを脇に置き、サーバーからレポを再クローンし、それらの間でマージしようとしました。もちろん、私のブランチに関係のない多くのファイルが表示されましたが、必要なファイルを分離するのに役立ちました。

于 2015-11-12T11:32:45.753 に答える