Git reflog - Gitリポジトリを以前のコミットに戻すには?

git revert -m 1 / git / git-checkout / git-reset / git-revert

現在の状態から、あるコミットで作成されたスナップショットに戻すには?

$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <me@me.com>
Date:   Thu Nov 4 18:59:41 2010 -0400

blah blah blah...

commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <me@me.com>
Date:   Thu Nov 4 05:13:39 2010 -0400

more blah blah blah...

commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <me@me.com>
Date:   Thu Nov 4 00:55:06 2010 -0400

And yet more blah blah...

commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <me@me.com>
Date:   Wed Nov 3 23:56:08 2010 -0400

Yep, more blah blah.

Paolo



Answer #1
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // xは戻るコミットの数です

この時点でブランチを作成し、ここから作業を開始することができます。

#特定のコミットをチェックアウトします。
#そうすると、「HEADが切り離された」という結果になります。これは、「HEAD」を意味します。
#は最新のものを指していないので、ブランチをチェックアウトする必要があります
#コードを更新できるようにするため。
git checkout <commit-id>

#指定されたコミットにフォークされた新しいブランチを作成します
git checkout -b <branch name>
git reflog
git checkout HEAD@{...}

頭を目的のコミットに「移動」します。

#これにより、ローカルの変更がすべて破棄されます。
#保持したいコミットされていない作業がある場合は、それを行わないでください。
git reset --hard 0d1d7fc32

#または、維持する作業がある場合:
git stash
git reset --hard 0d1d7fc32
git stash pop
#これにより変更が保存され、リセット後にそのパッチが再適用されます。
#変更した場合、マージの競合が発生する可能性があります
#リセットしたコミット以降に変更されました。