第1章 環境設定/1-4/約20分

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

この術でできるようになること

壊しても直前へ戻せる

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

なぜ要るか

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

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

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

やってみる

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

    git status --short
    

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

  2. わざと壊す

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

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

    確かめてみてください。

    cat README.md
    
    ぜんぶ消えた
    

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

  3. 何が起きたか見る

    git status --short
    
     M README.md
    

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

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

    - が消えた行、+ が増えた行です。Gitは何を失ったか全部覚えています。

  4. 戻す

    git checkout .
    
    Updated 1 path from the index
    
  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
    
  9. 保存してしまった失敗を取り消す

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

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

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

    git revert --no-edit HEAD
    
    [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つで戦えます。

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にどれだけ任せても平気になります。安全網は自分で張れました!

成果物を受け取る

この講座で作ったスキルやアプリは、会員登録すると1箇所からまとめて受け取れます。

成果物置き場へ

術の一覧へ戻る