Git
reset

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

More than 3 years have passed since last update.

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~