← Home

TECH NOTE · 2026.08.03

Git 障害対応記録

ブランチ・HEAD・Remote 設定が同時に不整合となった際の調査と復旧手順。


01. 発生した事象

さらに、以下のコマンドはエラーになった。

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/HEADref: 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 fetchgit 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 pullgit push だけで同期できる。

09. 障害原因まとめ

  1. HEAD が空の master ブランチを指していた。 コミット履歴がないため HEAD を基準に復元できず、全ファイルが Untracked と表示された。
  2. Remote(origin) の設定が消失していた。 接続先を認識できないため、fetch / pull が実行できなかった。

10. 今後の確認ポイント

コマンド 確認内容
git status 現在のブランチ・変更状態
git branch -a ローカル/リモートブランチ一覧
git remote -v Remote リポジトリ設定
type .git\HEAD HEAD が指すブランチ