2021年10月26日 更新

git reset --hard と git reset --softの違い

どうも、クラゲジュニアです。

今回は、git管理されているディレクトで特定コミットのタイミングに戻りたい時に使用する、git resetコマンドのオプションhard・softについてです。

シチュレーション

ディレクトリ構成

Git

表示

上記のシチュレーションでコミットメッセージeveningに戻って違いを比べてみます。
この状態でgit statusをして確認してみましょう。
変更が何もないことが確認できます。

hard

git reset --hard ${ハッシュ値}
表示上は、eveningのコミット時の状態に戻っています。

git statusで確認すると以下のようになっています。
logを確認すると・・

上記のことからhardは、選択したコミット時と同じ状態にresetされているのが確認できたかと思います。

soft

git reset --soft ${ハッシュ値}
表示上が元に戻っていないのが確認できるかと思います。

statusには、コマンドを打つ前とコマンドを打った後の差分がcommitされた変更として残っています。
log

これらのことから、変更を完全に消してしまいたい場合にはhardを使いましょう。
差分を残しておきたい場合には、softを使用しましょう。

以上です。