Note: witching to ‘origin/new_feature’. You are in ‘detached HEAD’ state…となる場合

  • 本番サーバーにSSH接続している状態
  • 開発環境で新しいブランチが作成済みでGithubにアップ済み

リモートの最新情報を取得

git fetch

実行結果:

...
* [new branch]        new_feature    -> origin/new_feature
...

この出力で新しいブランチが取得できたことが確認できます。

git fetch 実行後 開発環境 M F 本番環境 M F 開発環境の最新情報を本番環境に取得 (この時点ではまだブランチは切り替わっていない)

よくある間違い方

git checkout origin/new_feature

このコマンドを実行すると、以下の警告が表示されます:

Note: switching to 'origin/new_feature'.
You are in 'detached HEAD' state...
間違った方法:git checkout origin/feature 本番環境 M F H Detached HEAD状態(望ましくない) 表示は反映されるが、本番環境での管理として正しくない

これは「detached HEAD」という望ましくない状態になってしまいます。
Webサイトの表示自体は反映されますが、Gitの管理としては正しくない状態です。

正しい切り替え方法

git checkout new_feature

実行結果:

Branch 'new_feature' set up to track remote branch 'new_feature' from 'origin'.
Switched to a new branch 'new_feature'
正しい方法:git checkout feature 本番環境 M F H 正常なブランチ状態 本番環境で正しく管理された状態

このコマンドで:

  1. ローカルブランチが自動的に作成される
  2. リモートブランチの内容が反映される
  3. 正しいブランチ状態で切り替わる
正しい手順まとめ Step 1: git fetch リモートの最新情報を取得 Step 2: git checkout [branch-name] ブランチを切り替え(origin/は付けない) 注意点: ・origin/branch-nameの形式は使わない ・detached HEAD状態を避ける

本番環境で修正ブランチからmasterブランチに戻した(checkout)が、ファイルの内容は修正ブランチのままgit statusはクリーン

  • ワークツリー(Working Tree)の概念について
Gitのワークフロー:ワークツリーの位置づけ ワークツリー (Working Tree) index.html style.css script.js ステージングエリア (Staging Area / Index) index.html リポジトリ (Repository / .git) コミット git add git commit 【ワークツリー (Working Tree)】 ・実際に作業しているファイルのディレクトリ ・変更を加えたファイルはここに存在する ・「git status」で変更状態を確認できる 【ワークフロー】 1. ワークツリーでファイルを編集 2. 変更を「git add」でステージングエリアに追加 3. 「git commit」でリポジトリにコミット
  • HEAD

「今いるブランチ or コミット」を指すポインタ

原因の確認方法

ローカルとリモートの差を確認

git fetch origin
git diff master origin/master

reset --hard は巻き戻し不能なので、事前に内容バックアップ

git branch backup-before-reset

ログで確認

git log --oneline --graph --decorate

sample.html に関係するコミットの流れ

git log --oneline --graph --decorate --all -- sample.html
git log コマンドの実行結果 ターミナル – git log commit fa7eb3c58f9e21a4682b70e9bbd9636b60e202fb (HEAD -> main) Author: John Doe <john.doe@example.com> Date: Tue May 13 14:30:22 2025 +0900 Add feature X to application – Added new component for feature X – Updated related documentation commit 5a31b6fe25b647e996e85051e1fd0929d5477856 Author: John Doe <john.doe@example.com> Date: Mon May 12 11:15:43 2025 +0900 Fix bug in login system commit 72e4b3a9c0d5f6e7b8a9c0d5f6e7b8a9c0d5f6e7 Author: Jane Smith <jane.smith@example.com> Date: Sun May 11 09:45:12 2025 +0900 Initial commit 【git log】Git リポジトリのコミット履歴を表示するコマンド • 各コミットの情報: ハッシュID、作者、日時、コミットメッセージ • 「HEAD -> main」は現在のブランチと作業位置を示す
コマンド例説明主な用途
git log通常のログ。詳細なコミット情報(ハッシュ・日時・作者・メッセージ)基本の履歴確認
git log --oneline1コミット1行で表示。ハッシュ短縮&メッセージだけ履歴をざっくり見たいとき
git log --oneline --graph --decorate --allブランチ構造を視覚的に表示(分岐・マージの流れも)誰が何をどこでマージしたか確認したいとき
git log -p各コミットでの差分(パッチ)も表示何を変更したか細かく確認したいとき
git log --oneline -- sample.html指定ファイルだけに関係する履歴を表示そのファイルがいつ・誰に変更されたか確認
git log --oneline --author="名前"特定の作者によるコミットのみ表示誰がやったか犯人探し(笑)
git log --since="3 days ago"最近n日以内の履歴だけを表示最近の変更をざっくり確認したい
git log origin/master..HEADリモートとの差分を見る(HEAD にあって origin/master にないコミット)未 push のコミットがあるか確認
git log HEAD..origin/master逆方向(リモートにあってローカルにないコミット)リモートに新しい変更があるか確認

原因 git pull が裏でマージしてる可能性

git pull origin master

fetch + merge の合成コマンド。

原因 .gitignore が影響する可能性(ありえるけど限定的)

  1. rv_branch で .gitignore 対象外だったファイルを追加・修正
  2. master では .gitignore により追跡対象外
  3. その状態で git pull → merge → tracked file が master に混入

「追跡対象かどうか」確認

git ls-files --sample.html