元に戻す・無視する
やり直しは「どこまで進んだか」で道具が変わります。restore・reset・revert を区別することがこのステップの核心です。
学習目標
- まだしていない変更を安全に捨てられる
- すでに したコミットを安全に戻せる
- で成果物や秘密のファイルをから除外する
やり直しは「どこまで進んだか」で道具が変わります。まだコミットしていないなら 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 を置いてパターンを書けば、 はそのパスを一切見なくなります。注意点は、すでにコミット済みのファイルは .gitignore を追加してもされ続けることです。その場合は git rm --cached で追跡から外してからコミットし、パスワードがすでに上がっていれば履歴に残るので、その値自体を破棄して再発行してください。
やさしく理解する
3つの場面に3つの道具です。restore はまだコミットしていない変更を消す消しゴムです。reset は、まだ誰も持っていない自分のコミットについて時計の針を巻き戻します。revert は古いページを打ち消す新しいページを書きます。他の人が履歴を受け取った後は、これが安全なやり方です。
このステップで覚えるコマンド
目で読むだけでなく、実際にで打ってみてください。手が覚えて初めて実務で出てきます。
git restore <file>- ファイルのステージしていない変更を捨てます。ステージした内容に、何もステージしていなければ最後のコミットの状態に戻ります。捨てた変更は取り戻せません。
git reset --soft HEAD~1- 最後のコミットを取り消しつつ、変更はステージングに残します。メッセージを直すときによく使います。
git revert <commit>- そのコミットを打ち消す新しいコミットを作ります。履歴を書き換えないので共有でも安全です。
git diff --staged- ステージングに上げた内容をコミット前に確認します。コミット直前の習慣にしましょう。
もっと詳しく — 必要なときに開いてください
git restore <file> は誰が直したかを区別しません — そのファイルでステージしていない自分の作業も消えます。ステージした変更と新しい(untracked)ファイルには触れません。その場合は下のコマンドを使います。
git restore --staged <file>- ステージを取り消します。ステージングエリアからは外れますが、直した内容は作業に残ります。
git restore -p <file>- ファイルの変更を部分ごとに見せ、選んだ部分だけを捨てます。
git clean -ngit clean -fが消す、追跡されていないファイルの一覧を先に見ます。git restoreはこれらに触れないので、消す前に必ず一覧を確かめましょう。
よくある失敗と直し方
元に戻そうとして git reset --hard を使い、コミットしていなかった作業を失う失敗です。その作業はもう取り戻せません。何かを元に戻す前には git status を見て、終わっていない作業は git stash で預けておきます。
自分で記録する欄です。ここで採点はしません。
この段階を理解したものとして記録しますか?
まだ取り消せないので、本当に理解できたときだけ記録してください。
理解したものとして記録しました
自分で記録する欄です。ここで採点はしません。