このレッスンでできるようになること:
git statusの結果を3つのブロックで読み分けられる。ファイルの4つの状態(未追跡・変更済み・ステージ済み・コミット済み)を区別できる。作業ディレクトリ → add → commit で記録し、間違えても取り消せる。 所要時間: 60〜80分
再開する人へ: ①ターミナルを開く → ②
cd ~/fde-dojo(レッスン03で受け取った教材フォルダ)→ ③前回の続きから。うまくいかない・エラーが出たら、レッスン07で入れた doctor に「このエラーを診てください」と貼れば助けてくれます。
レッスン03で、Git の全体像をイメージでつかみ、Git をインストールして、この教材を clone で手元に受け取りました。今回は、その手元の教材フォルダの中で、実際に Git を使って記録します。やることは3つです。
- いまどうなっているかを
git statusで読む - 変更を add → commit で記録する
- 間違えたときに、安全に取り消す
すべて普通のターミナルで打ちます。Claude Code に頼むこともできますが、今回は仕組みを体で覚えるため、自分の手で動かします。
おさらいとゴール(受け取ったのは「コピー」)
大事な前提を1つ、先に共有します。あなたが clone で受け取ったこの教材リポジトリは、あなた専用のコピーです。ここであなたが刻むコミット(記録)は、あなたのパソコンの中だけに残ります。共有の本家に送る(push する)権限はあなたには無いので、もし push を試すと Permission denied(拒否されました)と返ってきます。これは故障ではなく、正常な反応です。手元で好きなだけ練習して大丈夫です。共有へ送るときに必要になる「認証」という関門は、第3章で体験します。
ステップ1: git status を読む
まず、fde-dojo の中にいることを確認して、今の状態を見ます。
cd ~/fde-dojo
git status
git status は「いま、どうなっている?」を見るだけの、何度打っても安全なコマンドです。結果は、次の図のようにいくつかのブロックに分かれて出ます。
- 見出し行(
Changes to be committed:など)が、そのブロックの意味です。 - そのすぐ下にある
(use "git ...")の行に注目してください。ここは、Git が「どう戻すか・どう進めるか」を自分で教えてくれる案内です。取り消しのコマンドも、たいていここに書かれています。慣れないうちは、この行を読むだけで次の一手が分かります。
いまの fde-dojo では、レッスン03で作った workspace/ch0/setup-notes.md が **Untracked files(まだ追跡していない)**として出ているはずです(他のレッスンで作ったファイルも一緒に出るかもしれません)。もし setup-notes.md が見当たらない場合は、先に用意します。
mkdir -p workspace/ch0
そのうえで、エディタで workspace/ch0/setup-notes.md を開き、1行でも書いて保存してから、もう一度 git status を打ってください(開き方はレッスン03のステップ5と同じです)。
ステップ2: ファイルの4つの状態
git status の各ブロックは、ファイルが今どの「状態」にあるかを表しています。状態は次の4つです。ここは丸暗記ではなく、「この4つを行き来しているんだな」というイメージで十分です。
| 状態 | どういう状態か | git status での見え方 |
|---|---|---|
| untracked(未追跡) | 新しく作った、Git がまだ存在を知らないファイル | Untracked files |
| modified(変更済み) | 追跡中のファイルを変更したが、まだ add していない | Changes not staged for commit |
| staged(ステージ済み) | git add して、次のコミットに含める状態にした | Changes to be committed |
| committed(コミット済み) | git commit して履歴に刻まれた状態 | どのブロックにも出ない(nothing to commit) |
前のレッスンで見た「作業ディレクトリ → ステージ → リポジトリ」という場所の流れと、この状態は裏表の関係です。add で「未追跡・変更済み」から「ステージ済み」へ、commit で「ステージ済み」から「コミット済み」へ動きます。次のステップで、実際にこの移り変わりを目で追います。
ステップ3: 1周目 ― 新しいファイルを記録する(add → commit)
さきほど Untracked files に出ていた setup-notes.md を、実際に記録します。
まず、これから記録する分だけをステージに載せます。
git add workspace/ch0/setup-notes.md
もう一度 git status を打つと、同じファイルが **Changes to be committed(コミットに含める分)**へ移っています。未追跡から、ステージ済みへ動いた、ということです。
では、記録(コミット)します。
git commit -m "ch0-06: 第0章のsetup-notesを記録"
-m "..." は、その記録に付けるメモ(コミットメッセージ)です。メッセージの付け方は、次の3つを意識すれば十分です。
- 1つのコミットには、1つの意味のまとまりを入れる(あれもこれも詰め込まない)
- **1行目は短く、「何をしたか」**を書く
- 日本語で構いません
達成状態: 1 file changed のような要約が出て、もう一度 git status を打つと、setup-notes.md が消えていること(コミット済みになったので、もう status には出ません)。これで、あなたの手による記録が1つ、履歴に刻まれました。
-mを付け忘れて、見慣れない画面が開いたら:git commitを-mなしで打つと、メッセージ入力用のエディタが開きます。レッスン03でcore.editorを nano(macOS)や notepad(Windows)に設定していれば、1行書いて保存して閉じれば進みます。もし黒い画面に文字が並ぶ Vim が開いてしまったら、あわてずEscを押し、:q!と打ってEnter。いったん中断できるので、-m "..."を付けて打ち直してください。
ステップ4: 2周目 ― 既存のファイルを変更して記録する
1周目は「新しいファイル(未追跡)」でした。2周目は「すでに記録したファイルを変更する(変更済み)」を体験します。ここが、実務でいちばん多いパターンです。
さきほどコミットした setup-notes.md を、エディタでもう一度開いて、このレッスンの気づきを1行書き足して保存してください(例: 06: add→commitの2周ができた。statusの3ブロックが読めた)。これが、第0章の通し成果物への追記にもなります。
書き足したら、状態を見ます。
git status
git diff
git status では setup-notes.md が **Changes not staged for commit(変更済み)**として出ます。git diff には、直前のコミットからの変更が +(足した行)で表示されます(長ければ q で抜けます)。
ここで、記録するためにステージへ載せます。
git add workspace/ch0/setup-notes.md
ここで1つ予測してください。 いま add した直後に、もう一度 git diff を打つと、どうなるでしょうか。
- A: さきほど書き足した行が、また
+で表示される - B: 何も表示されない(空になる)
答え合わせ(A か B を決めてから開いてください)
正解は B(何も表示されない)です。git diff は「まだステージに載っていない変更」を見せるコマンドです。add でステージに載せた瞬間、git diff から見た「未ステージの変更」は無くなります。では、ステージに載せた内容を見たいときは? そのときは git diff --staged を使います。
git diff --staged
これで、いま add 済みの変更(次のコミットに入る分)が確認できます。「git diff は未ステージ、git diff --staged はステージ済み」と覚えておくと、混乱しません。
予測が当たったか外れたかを、いま書き足した setup-notes.md の続きに、もう1行足しておいてください(例: 予測はA/Bだった。実際はBだった)。書けたら、記録します。
git add workspace/ch0/setup-notes.md
git commit -m "ch0-06: 気づきと予測の結果を追記"
git log --oneline を打つと、あなたのコミットが2件(1周目と2周目)並んでいるはずです(q で抜けます)。
ステップ5: 間違えたときの取り消し(3つの場面)
Git のありがたみは「間違えても戻せる」ことです。よくある3場面の戻し方を、名前だけでも知っておくと安心です。どれも、実は git status の (use "git ...") の行が教えてくれる内容です。
場面A: git add したのを取り消したい(ステージから下ろす)
「まだコミットしていないけど、add する対象を間違えた」ときです。編集内容は消さずに、ステージから下ろすだけです。
git restore --staged workspace/ch0/setup-notes.md
これで「ステージ済み」から「変更済み」に戻ります。あなたが書いた中身は消えません。
場面B: ファイルへの編集そのものを、直前のコミットの状態に捨てたい
「書き換えたけど、やっぱり全部なかったことにして、前のコミットの状態に戻したい」ときです。
git restore workspace/ch0/setup-notes.md
これは、まだコミットしていない編集を捨てるコマンドです。捨てた編集は元に戻せません。 打つ前に、必ず
git statusとgit diffで「何が消えるのか」を確認してください。なお、すでにコミット済みの内容までは消えません。あくまで「直前のコミット以降に書いた、まだ記録していない分」だけが対象です。だからこそ、こまめにコミットしておくと安全なのです。
場面C: 直前のコミットメッセージを書き間違えた
「コミットは正しいけれど、メッセージを打ち間違えた」ときです。まだ push していない、手元だけのコミットなら、メッセージを付け直せます。
git commit --amend -m "ch0-06: 正しいメッセージ"
これら以外の「もっと前のコミットに戻す」「コミットを取り消す」といった操作(
git resetやgit revertなど)は、少し踏み込んだ内容なので、第6章でまとめて手を動かします。今日は、この3場面が「戻せる」と知っていれば十分です。
ステップ6: 履歴を見る
最後に、これまでの記録を眺めます。
git log
達成状態: コミットごとに「誰が・いつ・どんなメッセージで」記録したかと、commit に続く長い英数字(ハッシュ)が並んで表示されること(q で抜けます)。ハッシュは、1つ1つのコミットに付く通し番号のようなものです。
特定のコミットの中身を見たいときは、ハッシュの先頭7文字で指定できます。
git show <ハッシュの先頭7文字>
(<ハッシュの先頭7文字> は、git log に出た英数字の頭7文字に置き換えます。山カッコは打ちません。レッスン03の <> の読み方と同じです。)
達成状態: そのコミット1件のメッセージと、変更内容(+・-)が表示されること。
仕組みの解剖 — 「状態」と「場所」は裏表
今日の操作を、2つの見方で振り返ります。
- 場所で見る: 作業ディレクトリ →(
git add)→ ステージ →(git commit)→ リポジトリ(.gitの履歴)。決まった向きに流れます。 - 状態で見る: untracked / modified →(
git add)→ staged →(git commit)→ committed。
この2つは、同じことを別の角度から言っているだけです。git status は、いまどのファイルがどの状態(=どの場所)にいるかの一覧表だと考えると、迷いません。そして Git は、次にどう進めるか・どう戻すかを、(use "git ...") の行でその場で教えてくれます。困ったら、まずその行を読む。これが、Git とうまく付き合うコツです。
なお、「コミットが .git の中で実際にどんな形で保管されているのか(スナップショットの正体)」という、もう一段深いところは、第1章でじっくり解剖します。今日は「状態と場所を、status で読み分けられる」ところまでで十分です。
理解ゲート
レッスン06で Claude Code を入れたので、今回は AI の先生に採点してもらえます。Claude Code を起動して、こう打ってください。
gatekeeperスキルで、第0章レッスン08の理解ゲートをお願いします
聞かれるのは、おおむね次の2つです(自分の言葉で答えられればOK。暗記ではありません)。
- (a) この教材フォルダ(
fde-dojo)のどこに何があるか、そして今日どのファイルを記録したかを、自分の言葉で説明してください - (b)
git addからgit commitまでの流れを、図に描いて顧客に説明するつもりで話してください
うまくスキルが動かない場合は、次のセルフチェックで自己採点してください。
Q1. `git status` の3つのブロックは、それぞれ何を表す?
例: Changes to be committed は add 済みで次のコミットに入る分です。Changes not staged for commit は変更したがまだ add していない分です。Untracked files はまだ Git が追跡していない新しいファイルです。
Q2. `git restore --staged ` と `git restore ` は、何が違う?
例:「--staged は、add をやめてステージから下ろすだけで、書いた中身は消えない。--staged なしは、まだコミットしていない編集そのものを捨てて、直前のコミットの状態に戻す(戻せないので、先に status と diff で確認する)」。
Q3. あなたのコミットを push できないのは、なぜ?
例:「この教材リポジトリは受け取り専用のコピーで、共有の本家に送る権限が無いから。Permission denied は正常な反応。認証をともなう push は第3章で扱う」。
セーブポイント
-
git statusを、3つのブロックで読み分けられる - ファイルの4状態(未追跡・変更済み・ステージ済み・コミット済み)を区別できる
- 1周目(新しいファイル)を add → commit で記録できた
- 2周目(既存ファイルの変更)を記録し、
git diffとgit diff --stagedの違いが分かった - 取り消しの3場面(add取り消し・編集を捨てる・メッセージ訂正)を知っている
-
git logで履歴を、git show <7文字>で1コミットの中身を見られた - push できない理由(受け取り専用のコピー)を説明できる
今日はここで区切ってOKです。再開するときは、ターミナルを開いて cd ~/fde-dojo から始めてください。
よくある詰まり
| 症状 | 原因と対処 |
|---|---|
git commit で Please tell me who you are と出る | レッスン03の git config(名乗りの設定)が済んでいません。名前とメールを登録してから、もう一度コミットしてください |
(Windows)warning: LF will be replaced by CRLF と出る | これは警告であって失敗ではありません。改行コードを Windows 向けに自動調整しているだけで、コミットは進んでいます。そのまま続けて大丈夫です |
(macOS).DS_Store が Untracked files に出てくる | Finder が作る管理用ファイルです。今は無視して構いません(記録しない)。こうしたファイルを最初から一覧に出さない「除外設定」は、第2章で扱います |
git commit で -m を付け忘れ、見慣れない画面が開いた | レッスン03で設定したエディタなら、書いて保存して閉じれば進みます。Vim が開いたら Esc → :q! → Enter で中断し、-m "..." を付けて打ち直してください |
git push を試したら Permission denied で拒否された | 正常です。この教材は受け取り専用のコピーで、本家へ送る権限はありません。手元のコミットはそのまま残っています |
ホームなど fde-dojo の外で Git のコマンドが fatal: not a git repository になる | Git が効くのは .git のある fde-dojo の中だけです。cd ~/fde-dojo で戻ってからやり直してください |
| 教材の更新を取り込もうとしたら、自分のコミットとぶつかった旨のメッセージが出た | あわてず、そのメッセージ全文を doctor に貼って相談してください。安全な進め方を案内します |
次は レッスン09 Node.jsを入れる へ。第4章や第5章でアプリを動かすための土台を用意します。
最終確認日: 2026-07-24