この記事では、Ubuntu18.04LTSにインストールしたGit(version 2.17.1)を使用しています。
Gitを使っている際に、ステージングしたりコミットしたりしている中、「もとに戻したい」場合が出てきます。
基本的な表にまとめると下表のようになります。
- HEAD・・・現在の最新のコミット
- ステージングエリア(インデックス)・・・git addしたところ
- 作業ディレクトリ(ワークツリー)・・・現在編集しているところ
HEAD | ステージングエリア | 作業ディレクトリ | |
---|---|---|---|
git reset --hard | ◯ | ◯ | ◯ |
git reset --mixed (no option) |
◯ | ◯ | ー |
git reset --soft | ◯ | ー | ー |
optionごとに分けて書いていきます。
HEADの位置、ステージングエリア、作業ディレクトリの全てを戻す
git reset --hard
--hardオプションをつける場合、HEADの位置・ステージングエリア・作業ディレクトリの3つ全部を元の状態に戻します。
全ての状態を元に戻してしまうということは、作業ディレクトリで編集していたものも戻ってしまうため、注意が必要です。
HEADの位置、ステージングエリアの2つを戻す
git reset
git reset --mixed
上記2つのコマンドで同じ働きをします。
ステージングエリアの状態を変えてしまうので、安易にオプション無しでの使用は注意が必要です。
HEADの位置のみを戻す
git reset --soft
HEADのみ変更したいとき、このオプションを使用します。