Есть ли способ отменить действие git revert head?

Я случайно запустил команду для неправильной ветки в моем репозитории. Есть ли способ отменить это изменение?


person blueberryfields    schedule 07.09.2010    source источник
comment
Прочитав документацию по сбросу на основе приведенных ниже советов, git reset --hard head~1 решил эту проблему за меня.   -  person blueberryfields    schedule 08.09.2010


Ответы (4)


git revert просто создает новую фиксацию — вы можете «удалить» ее с помощью git reset --hard HEAD^ (однако будьте с ней осторожнее!)

person Roman Cheplyaka    schedule 07.09.2010
comment
Будьте осторожны с git reset --hard HEAD^, так как он удалит все незафиксированные изменения. - person Jeremen; 07.02.2016
comment
Если вы сделаете git stash до git reset --hard HEAD^, вы сможете сохранить незафиксированные изменения. После git reset --hard HEAD^ выполните git stash pop, чтобы перезагрузить незафиксированные изменения в текущую ветку. - person kukko; 28.11.2016

Команда git revert просто создает фиксацию, которая отменяет другую. Вы сможете снова запустить git revert HEAD, и он отменит вашу предыдущую отмену и добавит для этого еще одну фиксацию. Или вы могли бы сделать git reset --hard HEAD~. Но будьте осторожны с последним, так как он стирает данные.

HEAD~ означает коммит перед текущим HEAD

person jonescb    schedule 07.09.2010
comment
Нет, не стирает данные. Он просто перемещает указатель ветки. Предыдущий коммит все еще существует, и вы можете увидеть его идентификатор, взглянув на git reflog (например). Через два месяца он будет очищен от мусора (конфигурация по умолчанию), но вы можете отключить автоматическую сборку мусора, и тогда каждая фиксация, которую вы когда-либо сделали, будет существовать вечно в этом репозиторий. Они просто недоступны через ветки. Но вы всегда можете найти их с помощью git fsck, и я опубликовал рецепт для просмотра всех коммитов, которые его используют. - person Aristotle Pagaltzis; 08.09.2010

Как насчет возврата возврата?

Просмотрите журнал git и получите хэш-тег плохого возврата:

git log -5

Затем выполните обратный возврат:

git revert

person Lasma    schedule 25.09.2012
comment
-1 это создаст еще один коммит, который здесь на самом деле не нужен - person CharlesB; 25.09.2012

Если вы были достаточно предусмотрительны, чтобы сделать это: revert --no-commit master, вы можете прервать это с помощью: git revert --abort в соответствии с советом git status:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
You are currently reverting commit dcc7c46.
  (all conflicts fixed: run "git revert --continue")
  (use "git revert --abort" to cancel the revert operation)
person ericP    schedule 24.03.2018