ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Git の特殊参照とは
Git では「コミットを指す名前」のことを参照(ref)と呼びます。ブランチ名(main など)やタグ名のほかに、Git が内部的に自動管理する特殊参照がいくつかあり、これらを理解するとreset / merge / rebase の失敗からの復旧が格段に楽になります。
| 参照 | 意味 | 更新タイミング |
|---|---|---|
HEAD | 現在のコミット | commit / checkout / reset 毎 |
ORIG_HEAD | 危険操作前の HEAD バックアップ | merge / rebase / reset / pull / am |
FETCH_HEAD | 最後に fetch したコミット群 | fetch / pull |
MERGE_HEAD | マージしようとしている相手 | merge 開始時(コンフリクト中のみ) |
CHERRY_PICK_HEAD | cherry-pick 中の対象コミット | cherry-pick 中のみ |
REVERT_HEAD | revert 中の対象コミット | revert 中のみ |
HEAD: 現在のコミット
HEAD は「いまどのコミットを見ているか」を表します。通常はブランチ名を指しますが、git checkout 等でdetached HEAD 状態にすると、コミットを直接指すこともあります。
# HEAD の中身を確認
cat .git/HEAD
# → ref: refs/heads/main (通常はブランチを指す)
cat .git/refs/heads/main
# → e3f4a2b... (コミットハッシュ)
# HEAD が指すコミットを表示
git rev-parse HEAD
git show HEAD
git log -1 HEAD
# 直前のコミット
git show HEAD~1
git show HEAD^
# 2 つ前
git show HEAD~2
git show HEAD^^
# HEAD の親が複数ある(マージコミット)場合
git show HEAD^1 # 第 1 親
git show HEAD^2 # 第 2 親
ORIG_HEAD: 危険操作前のバックアップ
Git は merge / rebase / reset / pull / am など履歴を書き換える可能性のある操作の直前に、その時点の HEAD を ORIG_HEAD として保存します。「やらかしたらまず ORIG_HEAD」と覚えておくと救われます。
# やらかしパターン1: reset --hard で消した
git log --oneline
# a1b2c3d (HEAD) ← いまここ
# e4f5g6h ← 大事なコミット
git reset --hard HEAD~3 # 3 つ消してしまった!
# → ORIG_HEAD には reset 直前の a1b2c3d が残っている
git show ORIG_HEAD
# 元に戻す
git reset --hard ORIG_HEAD
# やらかしパターン2: マージで予想外の変更が入った
git merge feature-x
# 大量にコンフリクト&意図しない変更
git merge --abort # 進行中ならこれ
# 完了済なら
git reset --hard ORIG_HEAD # マージ前に戻る
# やらかしパターン3: rebase が大荒れ
git rebase main
# 履歴がぐちゃぐちゃに
git rebase --abort # 進行中なら
git reset --hard ORIG_HEAD # 完了済なら
FETCH_HEAD: 最後の fetch 結果
git fetch でリモートから取得したコミット群が FETCH_HEAD に記録されます。git pull は内部的に「fetch → FETCH_HEAD を merge」を行っています。
# fetch だけ実行(merge はしない)
git fetch origin
cat .git/FETCH_HEAD
# 8c1d... not-for-merge branch 'develop' of github.com:...
# a2f9... branch 'main' of github.com:...
# → "not-for-merge" は明示的に取得していないブランチ
# 取得した最新を差分確認
git log HEAD..FETCH_HEAD --oneline
git diff HEAD FETCH_HEAD
# 手動でマージ
git merge FETCH_HEAD
# 特定リモートだけ FETCH_HEAD を見たい
git fetch origin main
git show FETCH_HEAD
MERGE_HEAD: マージ中の相手
マージがコンフリクトで止まっている間のみ存在します。コンフリクト解消の指針になります。
git merge feature-x
# CONFLICT! ... が表示
# → .git/MERGE_HEAD に feature-x の先頭コミットが書かれる
cat .git/MERGE_HEAD
# 9f8e7d6c5b4a...
# コンフリクト中に「相手側の変更」を確認
git show MERGE_HEAD:src/Login.php
# 「自分側」と「相手側」を見比べる
git show HEAD:src/Login.php # 自分(現在ブランチ)
git show MERGE_HEAD:src/Login.php # 相手
# マージを中断(HEAD と MERGE_HEAD 関連を全部リセット)
git merge --abort
reflog: 全ての HEAD 移動の履歴
ORIG_HEAD だけでは「2 操作前」までしか戻せませんが、git reflog なら過去 90 日分の HEAD 移動を全て確認できます。
# 過去の HEAD 移動を一覧
git reflog
# a1b2c3d HEAD@{0}: reset: moving to HEAD~3
# e4f5g6h HEAD@{1}: commit: 大事な変更
# 1234567 HEAD@{2}: commit: その前
# 特定の地点に戻る
git reset --hard HEAD@{1}
git reset --hard e4f5g6h # ハッシュ指定でも可
# 指定ブランチの reflog
git reflog show main
# 全 ref の reflog
git reflog show --all
# 期限切れ前に手動 gc 防止(90 日デフォルト)
git config gc.reflogExpire 200.days
参照を指定する記法(rev 表記)
| 記法 | 意味 |
|---|---|
HEAD | 現在 |
HEAD^ / HEAD~1 | 1 つ前 |
HEAD~3 | 3 つ前 |
HEAD^2 | マージコミットの第 2 親 |
HEAD@{2} | reflog の 2 つ前 |
HEAD@{yesterday} | 昨日時点の HEAD |
HEAD@{2.hours.ago} | 2 時間前の HEAD |
main..HEAD | main から HEAD までの差分 |
main...HEAD | 共通祖先からの両方向差分 |
FAQ
Q: ORIG_HEAD はいつ消える?
A: 次の危険操作(merge / reset / rebase 等)が走るまで保持されます。pull を立て続けにやると上書きされるので注意。確実に保存したい場合は別ブランチ git branch backup ORIG_HEAD を作ってから操作。
Q: detached HEAD 状態でコミットしたら?
A: ブランチに紐付かないコミットになり、checkout で離れると参照されなくなります。git reflog で見つけて git branch save で救出。
Q: reflog にも無いコミットを復元したい
A: git fsck --lost-found で .git/lost-found/ に dangling commit が出ます。gc されていなければ救えます。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 用語一覧
- エラー一覧
- git本体のインストール(Linux)
- Linuxサーバーへのgit導入とクライアントのセットアップ
- リモートリポジトリをローカルリポジトリとしてクローンする方法
- リモートとローカルのリポジトリを同期(pull)する方法
- 設定の確認
- gitユーザー名とemailの設定
- リモートリポジトリの作成
- ローカルリポジトリの作成
- 新規ファイル/ディレクトリをインデックスに登録
- インデックスの登録状態を確認
- ローカルリポジトリの変更をコミット
- コミット履歴の確認
- クライアントからリモートリポジトリの接続設定、確認、削除
- リポジトリへのプッシュ
- リモートリポジトリからクライアントへのSSHクローン
- リモートとローカルの差分表示
- バージョンの確認
- プロキシの設定
- ローカルをリモートリポジトリの状態に戻す
- ブランチの作成, 一覧表示, 切り替え
- ブランチのマージと削除
- リベース
- .gitignoreの書き方
- .gitignoreの設定が反映されない場合
- 特定のファイルをgitの管理から外す方法
- 参照(ORIG_HEAD, HEAD, FETCH_HEAD)
- git rm [-r --cached] の取り消し
- 一部のディレクトリ/ファイルのみをリポジトリから復元する方法
- ローカルとリモートリポジトリの有無を同期
- pushの取消し方法
- マージツールの起動方法
- Gitで「MERGING」の状態a
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?