Если вы хотите выполнить фиксацию поверх текущего HEAD с точным состоянием в другой фиксации, отменив все промежуточные фиксации, вы можете использовать reset
для создания правильное состояние индекса для совершения фиксации.
# Reset the index and working tree to the desired tree
# Ensure you have no uncommitted changes that you want to keep
git reset --hard 56e05fced
# Move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}
git commit -m "Revert to 56e05fced"
Он отменяет указанную фиксацию, что есть, добавляет коммит напротив него. Если вы хотите проверить более раннюю версию, сделайте следующее:
git checkout 56e05fced214c44a37759efa2dfc25a65d8ae98d
Что делает git-реверт, так это создает коммит, который отменяет изменения, сделанные в данном коммите, создавая коммит, который является обратным (ну, взаимным) по отношению к данному коммиту. Следовательно,
git revert <SHA-1>
должен и работает.
Если вы хотите перемотать обратно на указанный коммит, и вы можете это сделать, так как эта часть истории ещё не была опубликована, вам нужно использовать git-reset, а не git-revert:
git reset --hard <SHA-1>
(Обратите внимание, что --hard
заставит вас потерять любые нефиксированные изменения в рабочем каталоге).
Кстати, возможно, это не очевидно, но везде, где в документации сказано
или
(или ), вы можете поместить SHA-1 идентификатор (полный или сокращённый) коммита.