困ったときの git reset コマンド集
Introduction
Gitで間違ってadd、commitしたときに緊急回避するためのコマンド集.
Gitがリモート上がるまで
Gitは下記の順番でリモートにアップロードされます。
ワーキングツリー → インデックス → ローカルリポジトリ → リモートリポジトリ
- ワーキングツリー : 最新のファイル状態
- インデックス : コミットするためのファイル状態
- ローカルリポジトリ : ファイルの変更履歴を記録(ローカル環境)
- リモートリポジトリ : ファイルの変更履歴を記録(共有できる)
下記の用にそれぞれに変更履歴を反映させていきます。
- git add : 「ワーキングツリー → インデックス」
- git commit : 「インデックス → ローカルリポジトリ」
- git push : 「ローカルリポジトリ → リモートリポジトリ」
resetコマンド
間違えて"git add"、"git commit"をした場合、"git reset"を行うことでそれらの操作をなかったことにできます。
-
オプション
-
reset --hard :add、commit、ワーキングツリーの取り消し
-
reset --mixed:commitとaddの取り消し。
-
reset --soft :commitのみ取り消し。
-
HEAD
-
最新のコミットの状態を表している
-
@でも表現ができる : HEAD = @
-
^ や ~ をつけることで直前のコミットを表すことができる : HEAD^ 、 HEAD~
-
コマンド集
直前のコミットをなかったことにする
git reset --soft HEAD^
直前のコミットを取り消し
git reset --hard HEAD^
コミット後の変更を全部消したい
git reset --hard HEAD
addを取り消したい
git reset --mixed HEAD
git resetをなかったことにする
git reset --hard ORIG_HEAD
Conclusion
やっちまったときはgit resetで逃げましょう!!^^
でもやりすぎるとわけが分からなくなるので注意です!!
参考文献
-
git resetでどのオプション(hard, mixed, soft)を指定すべきか、シチュエーション別に分けてみる
https://qiita.com/kmagai/items/6b4bfe3fddb00769aec4 -
[git reset (--hard/--soft)]ワーキングツリー、インデックス、HEADを使いこなす方法
https://qiita.com/shuntaro_tamura/items/db1aef9cf9d78db50ffe