第1章 環境設定/5 本目 / 全 9/約20分

Git でいつでも戻れるようにする

こより

わざと壊して、自分の手で戻してみて。一度やっておくと、次に壊れても慌てないよ。

案内役 こより
この術でできるようになること

壊しても直前へ戻せる

画像は押すと原寸で開きます。

なぜ要るか

AIに任せる量が増えると、必ず壊れます。頼み方がずれて、動いていたところまで書き換えられる日が来ます。

そのとき効くのは知識ではなく、戻したことがあるという経験です。1回でも自分の手で戻していれば、次に壊れても慌てません。

だからこの術は、Gitを勉強する回にしません。わざと壊して、戻します。 壊すのはさっき作ったリポジトリなので、遠慮はいりません。

Gitは、保存した時点をいくつも覚えておいてくれるソフトです。ゲームのセーブデータが何個も残る状態を想像してください。失敗したら、好きなセーブ地点から再開できます。

AIプロンプト

この術の作業をAIへ任せるときは、これをそのまま貼ってください。

git diff を読んで、変更点を1行ずつ日本語で説明して。僕が頼んだのは『遊び方の追記』だけ。それと関係ない変更があれば教えて。

『遊び方の追記』の部分は、自分が頼んだ内容に置き換えてください。

やってみる

  1. いまの状態を確かめる

    git status --short
    

    何も出なければ、保存済みの状態と手元が一致しています。この「何も出ない」が安全な状態です。

  2. わざと壊す

    README.md の中身を、まるごと1行に上書きします。

    echo "ぜんぶ消えた" > README.md
    

    > は「左の文字を、右のファイルの中身として書き込む」という記号です。もともと入っていた内容は残らず消えます。

    確かめてみてください。cat は、ファイルの中身をそのまま画面に出すコマンドです。

    cat README.md
    
    ぜんぶ消えた
    

    書いた内容が消えました。普通なら焦る場面です。

  3. 何が起きたか見る

    git status --short
    
     M README.md
    

    M は変更されたという印です。さらに中身の差を見ます。

    git diff
    
    @@ -1,7 +1 @@
    -# my-first-game
    -2人で遊べるカードゲームを作ります。
    -
    -## 遊び方
    -
    -index.html をブラウザで開くだけで遊べます。
    -サーバーの起動やインストールは不要です。
    +ぜんぶ消えた
    

    - が消えた行、+ が増えた行です。1行目の @@ は「ファイルの何行目あたりの話か」を示す目印なので、読み飛ばして構いません。Gitは何を失ったか全部覚えています。

  4. 戻す

    git checkout .
    

    「保存していない変更を捨てて、前回保存した状態に戻す」コマンドです。最後の . は「いまいる場所より下にある全部」という意味です。

    Updated 1 path from the index
    

    「1つのファイルを戻しました」という報告です。

  5. 戻ったか確かめる

    cat README.md
    

    消えたはずの中身が返ってきます。

    # my-first-game
    2人で遊べるカードゲームを作ります。
    
    ## 遊び方
    
    index.html をブラウザで開くだけで遊べます。
    サーバーの起動やインストールは不要です。
    

    git status --short も何も出さなくなります。元通りです。

  6. 今度はファイルを丸ごと消してみる

    rm index.html
    ls
    
    README.md
    

    index.html が消えました。状態を見ます。

    git status --short
    
     D index.html
    

    D は削除されたという印です。

  7. 同じコマンドで戻す

    git checkout .
    ls
    
    index.html    README.md
    

    消したファイルも戻ります。保存済みのものは、消しても消えません。

  8. 記録を見る

    git log --oneline
    

    ここまでの足跡が並びます。上が新しい記録です。

    eb11a75 遊び方を追記
    7b1f633 はじめてのファイルをAIに作らせた
    15089e1 最初の書き換え
    63fee4f Initial commit
    

    左の英数字は、その記録に自動で振られた番号です。「あの時点へ戻したい」と指定するときの宛先になります。右は git commit -m で自分が書いた見出しです。

  9. 保存してしまった失敗を取り消す

    ここまでは「保存前」の失敗でした。次は保存してしまった場合です。まず、いらない行を足して保存します。

    echo "この行はいらなかった" >> README.md
    git add .
    git commit -m "いらない行を足してしまった"
    

    さっきの > と違い、>> は「末尾へ足す」という記号です。中身は消えず、1行増えるだけです。

    保存済みなので git checkout . では戻りません。こちらを使います。

    git revert --no-edit HEAD
    

    HEAD は「いちばん新しい記録」を指す言葉です。--no-edit は「取り消しの理由を書く画面を開かず、そのまま進めて」という指定です。

    [main 20be616] Revert "いらない行を足してしまった"
     1 file changed, 2 deletions(-)
    

    README.md から、さっき足した行だけが消えています。

  10. 記録は消えていないことを確認する

    git push
    

    GitHubの Commits を開くと、赤枠のように「失敗した保存」と「その取り消し」が両方残っています。

    GitHubのコミット履歴に「いらない行を足してしまった」とその Revert が並んでいる画面

    revert は履歴を消しません。なかったことにするのではなく、打ち消す やり方です。だから他の人と共有していても安全に使えます。

つまずきどころ

git checkout . を使うタイミングを間違えた

このコマンドは、保存していない変更を全部捨てます。「壊れた分だけ捨てたい」ときには向きますが、まだ保存していない大事な作業が混ざっているときは使わないでください。迷ったら先に git diff で中身を見ます。

保存済みなのに git checkout . で戻らない

正常です。保存済みのものは git revert で打ち消します。境目は「git commit したかどうか」だけです。

本当に消えてしまうケース

Gitが覚えているのは、一度でも git commit したものだけです。作ってから一度も保存していないファイルは戻せません。だからこそ、区切りごとに commit します。「動いた」と思ったら保存、が合言葉です。

AIが余計なところまで書き換えた

この術の内容がそのまま効きます。git diff で見て、気に入らなければ git checkout . で捨てる。この2つで戦えます。

差分が大きくて読み切れないときは、読む作業ごとAIへ渡してください。

claude -p "git diff を読んで、変更点を1行ずつ日本語で説明して。僕が頼んだのは『遊び方の追記』だけ。それと関係ない変更があれば教えて。"

「頼んだのはこれだけ」を添えるのが要点です。 基準を渡すと、余計な変更を見つける係になってくれます。

Windows の場合

git のコマンドはすべて同じです。ファイルを触るコマンドだけ違います。

PowerShell では cat rm echo ls がそのまま使えます(別名として用意されています)。この記事のコマンドはそのまま動きます。

CMD の場合は次のように読み替えてください。

この記事 CMD なら
cat README.md type README.md
rm index.html del index.html
ls dir

Git for Windows の Git Bash を使えば、読み替えなしでそのまま動きます。

次の一歩

もう1回、自分で壊して戻してみてください。今度は index.html を壊すのがおすすめです。ブラウザで開いて崩れたのを確認してから、git checkout . で直す。

これができれば、AIにどれだけ任せても平気になります。安全網は自分で張れました!

術の一覧へ戻る

メルマガ(無料)忖度なしのAI事情を、メールでお届けします。ご登録の方に、プレゼントをお渡ししています