はじめに
仕事で使っているファイルを管理しているGitリポジトリが壊れた。
HEADのハッシュ値が壊れたという主旨のメッセージが表示される。
環境
- OS: Windows 10 20H2
- Git: https://gitforwindows.org/title=Git for Windows 2.31.0 64-bit
- フロントエンド:TortoiseGit
現象
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
以上で、復旧した。