git reset の使い方
HEAD を戻す
書き方
git reset --soft コミット git reset [--mixed] コミット git reset --hard コミット git reset ファイル
--soft は HEAD だけ、--mixed はステージも、--hard は作業ツリーまで戻します(--hard は変更が消える)。HEAD~1 は 1 つ前。
よく使うオプション
| オプション | 意味 |
|---|---|
--soft | HEAD だけ戻す(ステージと作業ツリーは残る) |
--mixed | HEAD とステージを戻す(作業ツリーは残る。付けないときと同じ) |
--hard | 作業ツリーまで戻す(変更が消える) |
HEAD~数 | その数だけ前のコミット |
例
$ git reset --soft HEAD~2
最新の 2 つのコミットを取り消し、中身はステージに残します。2 つを 1 つのコミットにまとめ直すときに使います。
$ git reset HEAD~1
直前のコミットを取り消し、変更は作業ツリーに残します。add からやり直せます。
$ git reset --hard origin/develop
手元の develop を、リモートの develop と同じ状態に戻します。手元の変更とコミットは消えます。
$ git reset config.yml
config.yml をステージから下ろします。git restore --staged と同じ働きです。
よくある間違い・注意
- --hard は、コミットしていない変更を消し、戻せません。打つ前に git status と git stash で守ります。
- push したコミットを reset で消すと、ほかの人の履歴と合わなくなります。共有した後は git revert を使います。
- 間違えて reset したコミットは、git reflog で探して戻せます。
実際に打って練習する
Git コースの Lv20「時を戻す git reset」で覚えます(第3章 時の書庫(書き換えと復旧))。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
Lv1〜10 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。