GitHub-как вернуть изменения в предыдущее состояние
Я использую GitHub в качестве удаленного репозитория.
Я уже нажал 5 коммитов на сервер и хочу вернуться к состоянию до этих коммитов.
если хэш фиксации 3425661dba2aadccdbab
, как мне вернуть весь локальный / удаленный обратно к этой фиксации? Я пытался!--4-->
$ reset --hard 3425661dba2aadccdbab
но это только сбросило мою рабочую голову на эту ветку и требует от меня сделать git pull
снова. Я попытался проверить, но это заставило меня приземлиться в " отделенную голову" отделение.
4 ответов
у вас в основном есть два варианта возврата изменений:
- создайте новую фиксацию, которая применяет обратные изменения. Это предпочтительный вариант, поскольку он не изменяет историю в общедоступном репозитории
- удалите коммиты и принудительно нажмите их.
первый вариант может быть достигнуто с помощью git revert
git-revert-отменить некоторые существующие коммиты
учитывая один или несколько существующих коммитов, отмените изменения, внесенные соответствующими исправлениями, и запишите некоторые новые фиксации, которые их записывают.
пример git revert -n HEAD~5..HEAD
. Эта команда создает 5 новых коммитов, каждый из которых отменяет один из последних 5 коммитов текущей ветви.
второй вариант-фактически удалить коммиты. Обратите внимание, что это изменяет историю в репозитории. Поэтому любой, кто уже потянул изменения, вероятно, будет довольно удивлен, и все может быстро сумбурно. Тем не менее, вы можете сделать
git reset --hard HEAD~5
git push --force
первая команда сотрет все незафиксированные изменения в вашу рабочую копию. и сбросьте локальный репозиторий до состояния текущих коммитов HEAD-5. Вторая команда будет принудительно нажимать на удаленный по умолчанию (т. е. GitHub) там, любые изменения, расходящиеся с вашим текущим локальным репозиторием, перезаписываются.
еще одно предупреждение: Если вы действительно не знаете, что делаете, не используйте эту опцию так как это может привести к потере данных или другим, если не сделано правильно. вместо этого используйте первый вариант, поскольку он будет прозрачно удалять изменения, но без неприятных побочных эффектов переписывания истории.
можно сделать git revert <commit>
для всех коммитов, которые были сделаны после вашего требуемого состояния. (В обратном порядке, чтобы избежать каких-либо конфликтов.)
это чистый способ, если есть другие люди, разделяющие РЕПО, но немного усилий. (Хотя вы можете автоматизировать...?)
сделайте проверку git, затем зафиксируйте ее в нужной ветке. Это сделает новую фиксацию со старым кодом (так что у вас будет 6 фиксаций).
git checkout HEAD~3
, где 3-количество коммитов, к которым вы хотите вернуться.
еще лучше, вы можете проверить один файл в настоящей главе:
git checkout 3425661dba2aadccdbab:path/to/file/from/base
это уменьшит вероятность того, что другие люди будут сердиться на вас, вытаскивая пресловутый ковер из-под их ноги.
EDIT:
здесь есть аналогичный вопрос: