GitHub-как вернуть изменения в предыдущее состояние

Я использую GitHub в качестве удаленного репозитория.

Я уже нажал 5 коммитов на сервер и хочу вернуться к состоянию до этих коммитов.

если хэш фиксации 3425661dba2aadccdbab, как мне вернуть весь локальный / удаленный обратно к этой фиксации? Я пытался!--4-->

$ reset --hard 3425661dba2aadccdbab

но это только сбросило мою рабочую голову на эту ветку и требует от меня сделать git pull снова. Я попытался проверить, но это заставило меня приземлиться в " отделенную голову" отделение.

4 ответов


у вас в основном есть два варианта возврата изменений:

  1. создайте новую фиксацию, которая применяет обратные изменения. Это предпочтительный вариант, поскольку он не изменяет историю в общедоступном репозитории
  2. удалите коммиты и принудительно нажмите их.

первый вариант может быть достигнуто с помощью git revert

git-revert-отменить некоторые существующие коммиты

учитывая один или несколько существующих коммитов, отмените изменения, внесенные соответствующими исправлениями, и запишите некоторые новые фиксации, которые их записывают.

пример git revert -n HEAD~5..HEAD. Эта команда создает 5 новых коммитов, каждый из которых отменяет один из последних 5 коммитов текущей ветви.

второй вариант-фактически удалить коммиты. Обратите внимание, что это изменяет историю в репозитории. Поэтому любой, кто уже потянул изменения, вероятно, будет довольно удивлен, и все может быстро сумбурно. Тем не менее, вы можете сделать

git reset --hard HEAD~5
git push --force

первая команда сотрет все незафиксированные изменения в вашу рабочую копию. и сбросьте локальный репозиторий до состояния текущих коммитов HEAD-5. Вторая команда будет принудительно нажимать на удаленный по умолчанию (т. е. GitHub) там, любые изменения, расходящиеся с вашим текущим локальным репозиторием, перезаписываются.

еще одно предупреждение: Если вы действительно не знаете, что делаете, не используйте эту опцию так как это может привести к потере данных или другим, если не сделано правильно. вместо этого используйте первый вариант, поскольку он будет прозрачно удалять изменения, но без неприятных побочных эффектов переписывания истории.


сделать git push -f. Не очень хорошая идея, если есть другие люди, использующие то же самое РЕПО.


можно сделать git revert <commit> для всех коммитов, которые были сделаны после вашего требуемого состояния. (В обратном порядке, чтобы избежать каких-либо конфликтов.)

это чистый способ, если есть другие люди, разделяющие РЕПО, но немного усилий. (Хотя вы можете автоматизировать...?)


сделайте проверку git, затем зафиксируйте ее в нужной ветке. Это сделает новую фиксацию со старым кодом (так что у вас будет 6 фиксаций).

git checkout HEAD~3, где 3-количество коммитов, к которым вы хотите вернуться.

еще лучше, вы можете проверить один файл в настоящей главе:

git checkout 3425661dba2aadccdbab:path/to/file/from/base

это уменьшит вероятность того, что другие люди будут сердиться на вас, вытаскивая пресловутый ковер из-под их ноги.

EDIT:

здесь есть аналогичный вопрос:

проверка старой фиксации и сделать ее новой фиксацией