元に戻す・無視する
やり直しは「どこまで進んだか」で道具が変わります。restore・reset・revert を区別することがこのステップの核心です。
学習目標
- まだコミットしていない変更を安全に捨てられる
- すでに push したコミットを安全に戻せる
- .gitignore でビルド成果物や秘密のファイルをリポジトリから除外する
やり直しは「どこまで進んだか」で道具が変わります。まだコミットしていないなら git restore、コミット済みだがまだ push していないなら git reset、すでに push して他人が取得済みなら git revert です。この3つを取り違えると他人の履歴を壊すので、今どの状態かを git status で先に確認する習慣が必要です。
git reset には --soft・--mixed・--hard の3種類があります。--soft はコミットだけ取り消して変更はステージングに残し、既定の --mixed はステージングからも下ろし、--hard はファイルの内容まで戻します。--hard は作業内容を実際に消します。実行前に必ずもう一度読んでください。間違えても git reflog に痕跡が残っていることが多いので、すぐに諦めないでください。
ビルド成果物・node_modules・.env のような秘密ファイルはリポジトリに入れてはいけません。プロジェクトのルートに .gitignore を置いてパターンを書けば、GIT はそのパスを一切見なくなります。注意点は、すでにコミット済みのファイルは .gitignore を追加しても追跡され続けることです。その場合は git rm --cached で追跡から外してからコミットし、パスワードがすでに上がっていれば履歴に残るので、その値自体を破棄して再発行してください。
このステップで覚えるコマンド
目で読むだけでなく、実際にターミナルで打ってみてください。手が覚えて初めて実務で出てきます。
git restore <file>- まだコミットしていないファイルの変更を捨て、最後のコミットの状態に戻します。
git reset --soft HEAD~1- 最後のコミットを取り消しつつ、変更はステージングに残します。メッセージを直すときによく使います。
git revert <commit>- そのコミットを打ち消す新しいコミットを作ります。履歴を書き換えないので共有ブランチでも安全です。
git diff --staged- ステージングに上げた内容をコミット前に確認します。コミット直前の習慣にしましょう。