下記を参考にさせていただきました。
困ったときの git reset コマンド集
##Gitの階層構造
Gitは以下の順番でアップロードされている
ワーキングツリー
↓
インデックス
↓
ローカルリポジトリ
↓
リモートリポジトリ
- ワーキングツリー : 作業場所
- インデックス : コミットする変更を準備する場所
- ローカルリポジトリ : 変更履歴を記録(ローカル環境)
- リモートリポジトリ : 変更履歴を記録(共有できる)
またgitのコマンドは下記のようにアップロードしていく
- git add : 「ワーキングツリー → インデックス」
- git commit : 「インデックス → ローカルリポジトリ」
- git push : 「ローカルリポジトリ → リモートリポジトリ」
※インデックスがワークツリーとリポジトリの間にある理由
理由は、以下の2つです。
- ワークツリー内の必要ないファイルを含めずにコミットを行える。
- ファイルの一部の変更だけをインデックスに登録してコミットが可能)
git reset
git add
やgit commit
した時にgit reset
を使えば取り消すことができます。
$ git reset --soft HEAD^ #直前のコミットをなかったことにする
$ git reset --hard HEAD^ #直前のコミットを取り消す
$ git reset --hard HEAD #コミット後の変更を全部消す
$ git reset --mixed HEAD #addを取り消す
$ git reset --hard ORIG_HEAD #git resetをなかったことにする
またHEAD^の「^」を二つにしてHEAD^^にすると2つ前のコミットまで戻ります。
オプションの説明
- reset --hard :add、commit、ワーキングツリーを取り消す
- reset --mixed:commitとaddを取り消す。
- reset --soft :commitのみを取り消す。
$ git status -s
で確認
$ git status -s