Gitを使う最大の理由が「戻せること」です。ただし戻し方は状況によって違います。ここでは初心者が実際に使う4つだけを、危険度つきで整理します。
どれを使うかの早見表
| やりたいこと | コマンド | 危険度 |
|---|---|---|
| 編集を捨てて最後のコミットに戻したい | git restore ファイル名 | 高(編集内容が消える) |
git addを取り消したい | git restore --staged ファイル名 | 低 |
| 直前のコミットのメッセージを直したい | git commit --amend | 中 |
| 前のコミットの内容を打ち消したい | git revert コミットID | 低 |
いちばん上だけが「本当に消える」操作です。順番に見ていきます。
1. 編集を捨てる:git restore
「いろいろ試したけれど、やっぱり全部なかったことにしたい」というときです。
git restore style.cssstyle.cssが、最後にコミットした状態に戻ります。フォルダの中のいくつも直したときは、まとめて戻すこともできます。
git restore .2. addを取り消す:git restore —staged
「記録する箱に入れたけど、これは今回の記録に含めたくない」というときです。
git restore --staged script.js--stagedが付くと、箱から降ろすだけで編集内容には手を付けません。安心して使えます。
git statusを打ったとき、Gitの側からこの2つを案内してくれます。
Changes to be committed:
(use "git restore --staged <file>..." to unstage) ← 箱から降ろす
Changes not staged for commit:
(use "git restore <file>..." to discard changes) ← 編集を捨てるGitは、いま使えるコマンドを毎回教えてくれます。困ったらgit status、はここでも効きます。
3. 直前のコミットを直す:git commit —amend
コミットした直後に「メッセージを打ちまちがえた」「1ファイル入れ忘れた」と気づいたときです。
git commit --amend -m "すきなものリストを追加"直前のコミットが、新しいメッセージで上書きされます。入れ忘れたファイルがあるときは、先にgit addしてから同じコマンドを打てば、そのファイルも直前のコミットに含められます。
4. 前のコミットを打ち消す:git revert
「3つ前のコミットで入れた変更が原因で壊れた」というときです。まずコミットIDを調べます。
git log --onelinec3d4e5f 送信ボタンの色を変更
b2c3d4e フォームの動きを追加
a1b2c3d ページの骨組みを作った打ち消したいコミットのIDを指定します。
git revert b2c3d4eすると、そのコミットの変更を取り消す新しいコミットが積まれます。履歴は消えず、「取り消した」という事実も記録として残る——これが安全な理由です。
git resetは、いまは覚えなくていい
検索するとgit reset --hardという強力なコマンドがよく出てきます。これは履歴ごと巻き戻す操作で、指定をまちがえると作業がまとめて消えます。
初心者のうちは、この記事の4つで足りる場面がほとんどです。reset --hardは「そういう強い道具がある」とだけ覚えて、必要になったときに調べれば十分です。
このレッスンのまとめ
- 編集を捨てるのは
git restore——取り消せない操作なので対象をよく確認する git addの取り消しはgit restore --staged。編集内容は残るので安全- 直前のコミットの直しは
--amend(push前のみ)、上げたあとの取り消しはgit revert