Git 障害対応記録
ブランチ・HEAD・Remote 設定が同時に不整合となった際の調査と復旧手順。
01. 発生した事象
- 他のブランチへ切り替えられない
git pullが実行できないgit fetchが失敗する- Git クライアントの Remotes が空になっている
- ワークツリーに大量の Local Changes が表示される
さらに、以下のコマンドはエラーになった。
git reset --hard HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
02. 調査内容
最初に Git リポジトリであることを確認した。
git rev-parse --is-inside-work-tree
# true
続いて HEAD とブランチ一覧を確認した。
type .git\HEAD
# ref: refs/heads/master
git branch -a
# main
# release_202607
# remotes/origin/main
# remotes/origin/release_202607
git status
# On branch master
# No commits yet
つまり、現在の作業ブランチは master だが、このブランチには一度もコミットが存在しない状態だった。
03. 原因①:HEAD が空の master を指していた
.git/HEAD は ref: refs/heads/master を指していた。一方、実際の開発ブランチは main
であり、master は履歴のない空ブランチだった。
そのため HEAD が有効なコミットを指せず、git reset --hard HEAD も失敗した。
04. 原因②:全ファイルが Untracked Files と認識された
現在の master ブランチにはコミットがないため、Git はワークツリー内のファイルを管理対象として認識できず、すべて Untracked files
として表示していた。ファイルが消えたのではなく、現在のブランチに管理履歴がないことが原因である。
05. 対応方法:ブランチ復旧
今回はローカル変更をすべて破棄して問題なかったため、未追跡ファイルを削除してから正しいブランチへ強制切替を行った。
git clean -fd
git switch -f main
git clean -fd
-f は強制実行、-d は未管理ディレクトリも削除する指定。削除対象を残したい場合は実行してはいけない。
06. 原因③:Remote(origin) の設定が消失していた
Git GUI の Remotes が空だったため、以下を実行した。
git remote -v
# (出力なし)
これは .git/config 内の Remote 設定がなく、接続先のリモートリポジトリを認識できない状態を意味する。そのため git fetch と
git pull は正常に実行できなかった。
07. 一般的な復旧方法
Remote 設定がない、または正しくない場合は、GitHub / GitLab の Clone URL を確認してから再登録する。
git remote remove origin
# HTTPS の例
git remote add origin https://github.com/xxxxx/homepage.git
# SSH の例
git remote add origin git@github.com:xxxxx/homepage.git
git remote -v
git fetch --prune origin
08. Tracking Branch の設定
git switch main
git branch --set-upstream-to=origin/main main
これにより、以後は git pull と git push だけで同期できる。
09. 障害原因まとめ
- HEAD が空の master ブランチを指していた。 コミット履歴がないため HEAD を基準に復元できず、全ファイルが Untracked と表示された。
- Remote(origin) の設定が消失していた。 接続先を認識できないため、fetch / pull が実行できなかった。
10. 今後の確認ポイント
| コマンド | 確認内容 |
|---|---|
git status |
現在のブランチ・変更状態 |
git branch -a |
ローカル/リモートブランチ一覧 |
git remote -v |
Remote リポジトリ設定 |
type .git\HEAD |
HEAD が指すブランチ |