LoginSignup
80
77

More than 5 years have passed since last update.

git resetでどのオプション(hard, mixed, soft)を指定すべきか、シチュエーション別に分けてみる

Last updated at Posted at 2015-06-17

git reset、理屈はわかるんだけど、じゃあどういうときにどのオプションを使うんだっけ、というのは結構な頻度で調べたりする。
めんどくさいので軽くまとめる。適宜増やしたい。

(git resetオプションの基本的なことは、以下の記事が最高にわかりやすいのでそちらを参照してください。)
http://d.hatena.ne.jp/murank/20110327/1301224770

--hard

意味

コミット、インデックス、ファイルの変更をすべて削除する。

使いどころ

  • 変更自体を手元(ワーキングツリー)に残す必要すらないほど余計なコミットだった。

git reset --hard HEAD~

  • いろいろいじっておかしくなってしまったが、どこが悪いか分からない。とりあえず前回のコミット時点に戻りたい

git reset --hard HEAD

  • 昔のコミット時点の動作確認をしたい

git reset --hard [該当コミットのハッシュ値]

  • 似たようなことをやるならgit checkoutのほうが安全。

git checkout [該当コミットのハッシュ値]

該当コミットのハッシュ値はreflogやlogから調べることができる

--mixed

意味

コミット、インデックスを削除。ファイルの変更だけは残す。
git resetでオプションを指定しないときのデフォルトはこれ。

使いどころ

  • ノリでadd -uしてコミットしてしまったが、インデックスに載せる必要のないものも大量に載せてしまったので、とりあえずすべてインデックスから外したいとき。(変更は残ります)

git reset --mixed HEAD~

--soft

意味

コミットだけを削除する。インデックス、ファイルの変更は残す。

使いどころ

  • コミットを取り消したいが、再度コミットする際の変更点は少なそうな時。

git reset --soft HEAD~

80
77
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
77