Как отменить (откатить) действие git pull?

Рейтинг: 6Ответов: 2Опубликовано: 16.09.2014

Подскажите, пожалуйста, решение проблемы:

Есть две ветки: sphere и tags.

Я находился в ветке sphere и случайно сделал git pull origin tags, потом, заметив, что написал неправильно, и не посмотрев, что мердж прошел с конфликтами, сделал git pull origin sphere, и у меня в ветку влились все новые изменения из sphere.

Как мне вернуть код к состоянию до первого pull?

Ответы

▲ 7Принят
git reset --hard
git checkout sphere
git reflog
# Находите хэш коммита, в котором вы находились до первого pull-а.
# Будет что-то вроде "8f05e00 HEAD@{4}: checkout: moving from master to sphere"
# или "4c31200 HEAD@{10}: commit: Awesome feature implemented."
git reset --hard [нужный хэш]

Ну и я бы не рекомендовал использовать "git pull" вообще, потому как эта команда берет на себя слишком много функций и ее поведение неочевидно. Рекомендую разобраться поподробнее, как работает git, и использовать fetch + merge или fetch + rebase. Я лично предпочитаю второе, но это дело вкуса.

▲ 2

Если прям на предыдущее состояние:

git reset --hard HEAD@{1}
  • HEAD@{0} - текущий коммит (рабочий стейт)
  • HEAD@{1} - коммит перед текущим коммитом
  • HEAD@{N} - N как номер коммита от текущего

--hard сбросит все изменения отслеживаемых файлов! Если исправления всё же нужно сохранить - просто не указывай этот ключ...