なぜ要るか
AIに任せる量が増えると、必ず壊れます。頼み方がずれて、動いていたところまで書き換えられる日が来ます。
そのとき効くのは知識ではなく、戻したことがあるという経験です。1回でも自分の手で戻していれば、次に壊れても慌てません。
だからこの術は、Gitを勉強する回にしません。わざと壊して、戻します。 壊すのはさっき作ったリポジトリなので、遠慮はいりません。
やってみる
いまの状態を確かめる
git status --short何も出なければ、保存済みの状態と手元が一致しています。この「何も出ない」が安全な状態です。
わざと壊す
README.md の中身を、まるごと1行に上書きします。
echo "ぜんぶ消えた" > README.md確かめてみてください。
cat README.mdぜんぶ消えた書いた内容が消えました。普通なら焦る場面です。
何が起きたか見る
git status --shortM README.mdMは変更されたという印です。さらに中身の差を見ます。git diff@@ -1,7 +1 @@ -# my-first-game -2人で遊べるカードゲームを作ります。 - -## 遊び方 - -index.html をブラウザで開くだけで遊べます。 -サーバーの起動やインストールは不要です。 +ぜんぶ消えた-が消えた行、+が増えた行です。Gitは何を失ったか全部覚えています。戻す
git checkout .Updated 1 path from the index戻ったか確かめる
cat README.md消えたはずの中身が返ってきます。
# my-first-game 2人で遊べるカードゲームを作ります。 ## 遊び方 index.html をブラウザで開くだけで遊べます。 サーバーの起動やインストールは不要です。git status --shortも何も出さなくなります。元通りです。今度はファイルを丸ごと消してみる
rm index.html lsREADME.mdindex.htmlが消えました。状態を見ます。git status --shortD index.htmlDは削除されたという印です。同じコマンドで戻す
git checkout . lsindex.html README.md消したファイルも戻ります。保存済みのものは、消しても消えません。
記録を見る
git log --onelineここまでの足跡が並びます。
eb11a75 遊び方を追記 7b1f633 はじめてのファイルをAIに作らせた 15089e1 最初の書き換え 63fee4f Initial commit保存してしまった失敗を取り消す
ここまでは「保存前」の失敗でした。次は保存してしまった場合です。まず、いらない行を足して保存します。
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 から、さっき足した行だけが消えています。
記録は消えていないことを確認する
git pushGitHubの Commits を開くと、赤枠のように「失敗した保存」と「その取り消し」が両方残っています。
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にどれだけ任せても平気になります。安全網は自分で張れました!
