- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Git/git reflog (git resetを取り消す) へ行く。
- 1 (2012-02-19 (日) 14:40:53)
- 2 (2012-02-19 (日) 14:43:30)
- 3 (2012-02-19 (日) 14:43:30)
git reflog (git resetを取り消す)
間違ってgit resetしてしまって元に戻したい場合、git reflogでHEADを調べて、git resetし直す。
作業例
今、↓のような状態にある。
git log
* 16ace8b na 2012-02-19 update 1.txt #3 (HEAD, master) * 00da098 na 2012-02-19 update 1.txt #2 * c99c449 na 2012-02-19 update 1.txt #1 * 66bb609 na 2012-02-19 add 1.txt
「update 1.txt #3」のコミットは間違いだったので、「update 1.txt #2」のコミットの状態に戻すために、git reset --hardする。
git reset --hard HEAD^^
が、HEAD^じゃなくてHEAD^^を指定してしまい、「update 1.txt #」のコミットまで戻ってしまった。
git log
* c99c449 na 2012-02-19 update 1.txt #1 (HEAD, master) * 66bb609 na 2012-02-19 add 1.txt
こういう場合にgit reflogを実行する。
git reflog
c99c449 HEAD@{0}: HEAD^^: updating HEAD 16ace8b HEAD@{1}: commit: update 1.txt #3 00da098 HEAD@{2}: commit: update 1.txt #2 c99c449 HEAD@{3}: commit: update 1.txt #1 66bb609 HEAD@{4}: commit (initial): add 1.txt
とりあえずgit resetする前の状態(HEAD@{1})に戻す為に、git resetをし直す。
git reset --hard HEAD@{1}
これで元に戻った。
git log
* 16ace8b na 2012-02-19 update 1.txt #3 (HEAD, master) * 00da098 na 2012-02-19 update 1.txt #2 * c99c449 na 2012-02-19 update 1.txt #1 * 66bb609 na 2012-02-19 add 1.txt
改めてgit resetする。
git reset --hard HEAD^
これで当初の目的通り、「update 1.txt #2」のコミットの状態になった。
git log
* 00da098 na 2012-02-19 update 1.txt #2 (HEAD, master) * c99c449 na 2012-02-19 update 1.txt #1 * 66bb609 na 2012-02-19 add 1.txt
参考
なお、ここまでやって、git reflogは以下のようになっている。
git reflog
00da098 HEAD@{0}: HEAD^: updating HEAD 16ace8b HEAD@{1}: HEAD@{1}: updating HEAD c99c449 HEAD@{2}: HEAD^^: updating HEAD 16ace8b HEAD@{3}: commit: update 1.txt #3 00da098 HEAD@{4}: commit: update 1.txt #2 c99c449 HEAD@{5}: commit: update 1.txt #1 66bb609 HEAD@{6}: commit (initial): add 1.txt