導入
Git を安心して使えるのは「取り消せる」からです。ただし取り消しには段階があります。「まだステージだけ」「作業ツリーの編集ごと」「コミットまで」。それぞれに対応するコマンドを整理します。
説明
ステージから降ろす(コミット候補から外す) には git restore --staged。
git init
git add .
git status
git restore --staged README.md
git status
README.md が「コミット予定」から「Untracked / 未ステージ」に戻ります。ファイルの中身はそのままです。
作業ツリーの編集を捨てて、直前のコミットの状態に戻す には git restore(--staged なし)。
git commit -m "Initial commit"
echo "余計な変更" >> README.md
git restore README.md
cat README.md
書き足した行が消え、コミット時点に戻ります。
コミットごと巻き戻す には git reset。戻し方は3種類あります。
| モード | 履歴(HEAD) | ステージ | 作業ツリー |
|---|---|---|---|
--soft | 戻す | そのまま | そのまま |
--mixed(既定) | 戻す | 戻す | そのまま |
--hard | 戻す | 戻す | 戻す(編集も消える) |
echo "2つ目" >> app.js
git add .
git commit -m "second"
git reset --soft HEAD~1
git status
HEAD~1 は「1つ前のコミット」。--soft なので直前コミットが取り消され、その変更は ステージに載ったまま 残ります。--hard は作業中の変更まで消えるので、使うときは慎重に。
やってみよう
git add → git restore --staged でステージから降ろせること、git restore で編集を捨てられることを確認しましょう。最後に git reset --soft HEAD~1 でコミットだけ取り消せることも試してみてください。
演習
ステージ済みの README.md を、中身を保ったままステージから降ろしてください。
ヒント1を見る
ステージから降ろすのは git restore --staged <ファイル>。