無料プレビュー 4 / 14

状態と履歴を読む — 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 の - / + で行単位の変更を把握

次のレッスンでは、間違えたときの取り消し操作を学びます。

参考リンク

全 14 レッスンを、登録なしで無料で読めます。