【git チートシート】git reset でローカルの変更を取り消す

直前のコミットを取り消したい(ファイルの変更とaddはそのまま)
直前のコミットとaddを取り消したい(ファイルの変更はそのまま)
直前のファイル変更、add、コミット全てを取り消したい
コミットした後に実施したaddを取り消したい
コミットした後に実施したファイル変更とaddを取り消したい
間違えてresetコマンドを打ってしまい前の状態に戻したい
色々いじってしまったので前の状態を指定して戻したい
TIPS


直前のコミットを取り消したい(ファイルの変更とaddはそのまま)

$ git reset --soft HEAD^
# softオプションは [HEAD] を1つ前の状態にする

直前のコミットとaddを取り消したい(ファイルの変更はそのまま)

$ git reset --mixed HEAD^
# mixedオプションは [インデックスとHEAD] を1つ前の状態にする
# オプション指定無しだとmixedが実施される

直前のファイル変更、add、コミット全てを取り消したい

$ git reset --hard HEAD^
# hardオプションは [ワーキングツリー、インデックス、HEAD] を1つ前の状態にする

コミットした後に実施したaddを取り消したい

$ git reset --mixed HEAD
# mixedオプションをつけて [インデックス、HEAD] を現在のコミットの状態にする
# HEADの位置はそのままなので、インデックスの変更のみ消せる

コミットした後に実施したファイル変更とaddを取り消したい

$ git reset --hard HEAD
# mixedオプションをつけて [インデックス、HEAD] を現在のコミットの状態にする
# HEADの位置はそのままなので、インデックスの変更のみ消せる

間違えてresetコマンドを打ってしまい前の状態に戻したい

$ git reset --hard ORIG_HEAD
# mixedオプションをつけて [インデックス、HEAD] を現在のコミットの状態にする
# HEADの位置はそのままなので、インデックスの変更のみ消せる

色々いじってしまったので前の状態を指定して戻したい

$ git reflog
$ git reset [必要なオプション] [戻したい時点のhash値]
# git reflog でHEADの履歴を確認し、git resetにhash値を指定する

【TIPS】

●RESETコマンドのオプションについて
# よく使うのは soft / mixed / hard ( その他オプションは git reset -h で確認可能)
# softオプションは [HEAD(コミットの状態)] が対象
# mixedオプションは [インデックス(addの状態) + HEAD] が対象(=オプション指定無しの動作)
# hardオプションは [ワーキングツリー(ファイルの状態) + インデックス + HEAD] が対象

●HEADの指定方法について
# HEAD^ / @^ / HEAD~ は直前のコミットを意味する
# HEAD~{n} : n個前のコミットを指定できる
# ^の数と{n}の値は同じ意味を表すため、HEAD^^ / @^^ / HEAD~{2} は同じ
# HEADには、HEADのhash値でも指定可能
このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です