Note: witching to ‘origin/new_feature’. You are in ‘detached HEAD’ state…となる場合
- 本番サーバーにSSH接続している状態
- 開発環境で新しいブランチが作成済みでGithubにアップ済み
リモートの最新情報を取得
git fetch
実行結果:
...
* [new branch] new_feature -> origin/new_feature
...
この出力で新しいブランチが取得できたことが確認できます。
よくある間違い方
git checkout origin/new_feature
このコマンドを実行すると、以下の警告が表示されます:
Note: switching to 'origin/new_feature'.
You are in 'detached HEAD' state...
これは「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'
このコマンドで:
- ローカルブランチが自動的に作成される
- リモートブランチの内容が反映される
- 正しいブランチ状態で切り替わる
本番環境で修正ブランチからmasterブランチに戻した(checkout)が、ファイルの内容は修正ブランチのままgit statusはクリーン
- ワークツリー(Working Tree)の概念について
- 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 --oneline | 1コミット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 が影響する可能性(ありえるけど限定的)
- rv_branch で .gitignore 対象外だったファイルを追加・修正
- master では .gitignore により追跡対象外
- その状態で git pull → merge → tracked file が master に混入
「追跡対象かどうか」確認
git ls-files --sample.html