Gitトラブル:fatal: your current branch appears to be broken

はじめに

仕事で使っているファイルを管理しているGitリポジトリが壊れた。
HEADのハッシュ値が壊れたという主旨のメッセージが表示される。

環境

現象

TortoiseGitにおいて、同期(pull, push)を行おうとすると以下のようなメッセージがでる

ブランチ「origin/master」を把握していないため何をプッシュするか不明です

ログを見ようとすると以下のメッセージがでる。

Could not get all refs,
libgit2 returned: currupted loose referece files:
ref/remotes/origin/master

他にもHEADのハッシュが壊れているという主旨のメッセージが表示された。

解決法

以下のページに従い作業することでローカルのHEADのハッシュは回復できた。なお、私はmasterブランチで作業をしていた。
qiita.com

以下が手順の概略。

まず、Git for WindowsのGit Bashを使ってターミナルを開く。Gitで管理しているディレクトリに移動する。

% cd 当該ディレクトリ

ログファイルを確認する。一番下の文字列が最新のコミット結果となる。

% tail .git/logs/refs/heads/master
~中略~
413b545fa4347c7e1855408679fde9fc2cb51e4a 1498fd593267a919acdf993395c3999ac55c3ec9 ユーザ名 <メールアドレス> 1615903822 +0900 pull -v --progress origin: Fast-forward
1498fd593267a919acdf993395c3999ac55c3ec9 0c4847d281cd8e9ad3592a2d2bd5e486b5c38efc ユーザ名 <メールアドレス>  1615992344 +0900 pull -v --progress origin: Fast-forward
0c4847d281cd8e9ad3592a2d2bd5e486b5c38efc a2f1ef9f29da07869d0cea88a968dd49b47687a1 ユーザ名 <メールアドレス>  1616036296 +0900 commit: コミットコメント

最終行の2列目「a2f1ef9f29da07869d0cea88a968dd49b47687a1」を.git/refs/heads/masterにコピーし、保存する。

% vim .git/refs/heads/master

その後、以下のコマンドを実行する。

% git stash save test

復帰したことを確認する。エラーがでなければとりあえず、ローカルのHEADは復帰している。

% git branch 
% git log

同様に.git/refs/remotes/origin/masterの最後の行の2列目のハッシュ値を.git/refs/remotes/origin/masterにコピーする。

% tail .git/refs/remotes/origin/master
% vim .git/refs/remotes/origin/master

以上で、復旧した。