相変わらずGit勉強中です。
以下自分用のメモです。
特定のコミット自体をなかったことにするには
git reset --hard ...
を利用すればいいのですが、このコマンドはhardとオプションが
ついているように、コミット自体が無かったことになってしまいます。
なので、間違えて違うコミットの部分にresetしてしまうと
アワワワな事になります。(というか、なりましたw)
でも、さすがgitさん。当然元に戻す方法がありました。
reflogを使って、元に戻せます。
元に戻す場合に利用するコマンドも git reset --hard です。
git reset --hard "HEAD@{x}"
xの部分には、reflogの番号が入ります。
通常元に戻す場合は、"HEAD@{1}"になると思います。
# 試すためのブランチつくって切り替え git checkout -b test-branch # 適当なファイルを新規作成してコミット git add -A git commit -m "first commit" # 何回分かのコミット履歴を作っておく git commit -am "second commit" git commit -am "third commit" # コミットログ確認 git log --oneline -n 3 64606a0 third commit 6be52a3 second commit 74f21a7 first commit # 2番目のコミット (second commit) に戻ろうと思って、間違えて first commitまで戻ってしまった・・・ git reset --hard HEAD^^ HEAD is now at 74f21a7 first commit # ログ見ると、履歴が取り消されてる・・・ git log --oneline -n 3 74f21a7 first commit # reflogを確認! git reflog -n 5 74f21a7 HEAD@{0}: reset: moving to HEAD^^ # <<--ここがさっき間違えてresetした地点 64606a0 HEAD@{1}: commit: third commit # <<--取り消される前のコミット履歴が残っている 6be52a3 HEAD@{2}: commit: second commit 74f21a7 HEAD@{3}: commit: first commit 30fa85e HEAD@{4}: checkout: moving from master to test-branch # 戻すべきreflogが判明したので、再度reset --hardする git reset --hard "HEAD@{1}" HEAD is now at 64606a0 third commit # コミットログ確認 git log --oneline -n 3 64606a0 third commit 6be52a3 second commit 74f21a7 first commit # # ちゃんと戻ってる! # # このブランチ、もういらないので削除 git checkout master git branch -D test-branch
================================
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場