Вернуться к фиксации с помощью хэша SHA в Git? [дубликат]
этот вопрос уже есть ответ здесь:
Я не понимаю, как git revert строительство. Например, я хочу вернуться к фиксации шести коммитов за головой, возвращая все изменения в промежуточных коммитах между ними.
сказать его ша хэш 56e05fced214c44a37759efa2dfc25a65d8ae98d. Тогда почему я не могу просто сделать что-то вроде:
git revert 56e05fced214c44a37759efa2dfc25a65d8ae98d
9 ответов:
Если вы хотите совершить фиксацию поверх текущей головки с точным состоянием при другой фиксации, отменяя все промежуточные фиксации, то вы можете использовать
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-revert does-это создание фиксации, которая отменяет изменения, внесенные в данную фиксацию, создавая фиксацию, которая является обратной (ну, обратной) данной фиксации. Поэтому
git revert <SHA-1>должен и работает.
если вы хотите вернуться к указанному фиксации, и вы можете сделать это, потому что эта часть истории еще не была опубликована, вам нужно использовать git-reset, а не git-revert:
git reset --hard <SHA-1>(обратите внимание, что
--hardбудет сделайте так, чтобы вы потеряли все незакрепленные изменения в рабочем каталоге).Дополнительная Информация
кстати, возможно, это не очевидно, но везде, где документация говорит
<commit>или<commit-ish>(или<object>), можно поставить SHA-1 идентификатор (полный или сокращенный) фиксации.
он возвращает указанный коммит, то есть добавляет коммит, противоположный ему. Если вы хотите проверить более раннюю версию, вы делаете:
git checkout 56e05fced214c44a37759efa2dfc25a65d8ae98d
лучший способ отката к определенной ревизии является:
git reset --hard <commit-id>затем:
git push <reponame> -f
если ваши изменения уже были перенесены в public, shared удаленный, и вы хотите вернуть все коммиты между
HEADи<sha-id>, затем вы можете передать диапазон фиксации вgit revert,git revert 56e05f..HEADи он вернет все коммиты между
56e05fиHEAD(исключая начальную точку диапазона,56e05f).
обновление:
этот ответ проще, чем мой ответ: как вернуть репозиторий Git к предыдущей фиксации?
оригинальный ответ
# Create a backup of master branch git branch backup_master # Point master to '56e05fce' and # make working directory the same with '56e05fce' git reset --hard 56e05fce # Point master back to 'backup_master' and # leave working directory the same with '56e05fce'. git reset --soft backup_master # Now working directory is the same '56e05fce' and # master points to the original revision. Then we create a commit. git commit -a -m "Revert to 56e05fce" # Delete unused branch git branch -d backup_masterдве команды
git reset --hardиgit reset --softмагия здесь. Первый меняет рабочий каталог, но он также меняет и голову. Мы фиксируем голову на второй.
это более понятным:
git checkout 56e05fced -- . git add . git commit -m 'Revert to 56e05fced'и чтобы доказать, что он работал:
git diff 56e05fced
Comments