git undo changes - Как вернуть Git-репозиторий на предыдущий коммит?

git rollback / 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 - количество коммитов t вернуться

В этот момент вы можете создать ветку и начать работу с этой точки:

# Оформить заказ на фиксацию.
# Это приведет к `detached 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
# Это сохраняет изменения, а затем повторно применяет этот патч после сброса.
# У вас могут возникнуть конфликты слияния, если вы изменили то, что было
# изменилось с момента совершения сброса.