- 追加された行はこの色です。
- 削除された行はこの色です。
* git reflog (git resetを取り消す) [#t318a3f5]
間違ってgit resetしてしまったので、元に戻したい場合はgit reflogでHEADを調べて、git resetし直す。
** 作業例 [#x75fd54b]
今、↓のような状態にある。
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
*** 参考 [#fb3cdc64]
なお、ここまでやって、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