状態と履歴を読む — status, log, diff
学習目標
このレッスンを終えると、次のことができるようになります。
git statusでいまの作業状態 (未保存変更・ステージング状況) を読めるgit logで過去の commit を時系列で読めるgit diffで「何が変わったか」を行単位で読める
なぜ「読む」コマンドが重要か
書き込みコマンド (git add / commit / push) を AI Agent に任せる前提でも、自分の目で状態を確認する習慣が事故を防ぐ。AI が「commit しました」と言っても、本当に意図通りかを git status / git log で必ず確認する。
flowchart LR
AI[AI が操作] --> S[git status<br/>本当に変更が反映されたか]
S --> L[git log<br/>新しい commit が乗ったか]
L --> D[git diff HEAD~1<br/>1 つ前との差分を見る]
D --> OK{意図通り?}
OK -->|Yes| 次へ
OK -->|No| 戻す[元に戻す<br/>次レッスンで学ぶ]
git status — 今の状態を読む
git status
出力例:
ブランチ feature/login の上で作業中
コミット予定の変更点:
(use "git restore --staged <file>..." to unstage)
modified: src/login.py
コミット予定にない変更点:
(use "git add <file>..." to update what will be committed)
modified: src/header.py
追跡されていないファイル:
(use "git add <file>..." to include in what will be committed)
notes.txt
3 つのセクションを読み解く:
| セクション | 意味 | 次にやること |
|---|---|---|
| コミット予定の変更点 (Staged) | git add 済。次の commit に入る |
git commit でセーブ |
| コミット予定にない変更点 (Unstaged) | 編集はしたが add してない | git add するか、不要なら戻す |
| 追跡されていないファイル (Untracked) | Git が一切認識していない新規ファイル | git add して履歴に入れるか、.gitignore で無視 |
git log — 過去の commit を読む
git log
出力例:
commit a1b2c3d4e5f67890... (HEAD -> feature/login)
Author: 山田太郎 <yamada@example.com>
Date: Fri May 16 14:32:01 2026 +0900
fix: ログイン後のリダイレクト先を /home に変更
commit 9f8e7d6c5b4a3210...
Author: 鈴木花子 <suzuki@example.com>
Date: Thu May 15 18:05:33 2026 +0900
feat: ログインフォームのデザインを刷新
実務でよく使うバリエーション:
git log --oneline # 1 commit = 1 行で圧縮表示
git log --graph --oneline # ブランチの分岐を ASCII アートで可視化
git log -5 # 最新 5 件だけ
git log --author="山田" # 山田さんの commit だけ
git log -- src/login.py # 特定ファイルの履歴だけ
--graph --oneline が最強。実行例:
* a1b2c3d (HEAD -> feature/login) fix: ログイン後のリダイレクト先を /home に変更
* 9f8e7d6 feat: ログインフォームのデザインを刷新
|\
| * 5d4c3b2 (origin/main) docs: README を更新
* | 3a2b1c0 fix: テスト失敗を修正
|/
* 7e8f9a0 初期コミット
|/ の枝分かれは「ブランチが分かれてから後で合流した」サイン。これを読めると履歴が立体的に見える。
git diff — 変更内容を行単位で読む
バリエーション
| コマンド | 何の差分 |
|---|---|
git diff |
編集したがまだステージしていない変更 |
git diff --staged |
ステージ済の変更 (次の commit に入るもの) |
git diff HEAD~1 HEAD |
1 つ前の commit と現在の差分 |
git diff main feature/login |
2 つのブランチの差分 |
git diff a1b2c3d 9f8e7d6 |
特定の 2 つの commit 間の差分 |
出力の読み方
diff --git a/src/login.py b/src/login.py
index abc1234..def5678 100644
--- a/src/login.py
+++ b/src/login.py
@@ -10,7 +10,7 @@ def login(user):
if not user.is_active:
raise PermissionError("Inactive user")
session["user_id"] = user.id
- return redirect("/dashboard")
+ return redirect("/home")
-で始まる行 = 削除された行+で始まる行 = 追加された行@@ -10,7 +10,7 @@= 「10 行目から 7 行分」のあたりが変わった
振り返り
- AI に任せる前提でも、自分で
status/log/diffを読む習慣で事故が激減する git log --graph --onelineでブランチ構造を視覚化git diffの-/+で行単位の変更を把握
次のレッスンでは、間違えたときの取り消し操作を学びます。
参考リンク
- Pro Git「変更内容のステージング」: https://git-scm.com/book/ja/v2/Git-の基本-変更内容のリポジトリへの記録
git log公式: https://git-scm.com/docs/git-log
全 14 レッスンを、登録なしで無料で読めます。