git reset の使い方

HEAD を戻す

書き方

git reset --soft コミット
git reset [--mixed] コミット
git reset --hard コミット
git reset ファイル

--soft は HEAD だけ、--mixed はステージも、--hard は作業ツリーまで戻します(--hard は変更が消える)。HEAD~1 は 1 つ前。

よく使うオプション

オプション意味
--softHEAD だけ戻す(ステージと作業ツリーは残る)
--mixedHEAD とステージを戻す(作業ツリーは残る。付けないときと同じ)
--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 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。

Git コマンド一覧(使い方と例)へ戻る