Первое: не паникуйте
Это система контроля версий . Он существует, поэтому вы не можете легко потерять информацию.
Вы всегда можете сначала сохранить работу:
git checkout -b RESCUE_THIS
git add .
git commit -am 'Do not loose this commit!'
и взять ее оттуда.
Я предлагаю:
отменить неудачный коммит
git reset HEAD @ {1} #, если это был последний коммит
вам нужно выяснить, какие изменения вы хотите сохранить, и потенциально зафиксировать их в новом коммите. Примечание используйте git reflog
, чтобы найти 'HEAD @ {1} part that you want. Take your time as this can be a bit confusing when comparing to
git log`
git revert bad-commit-id #, если он не был't
Примечание Найдите версии для отмены с помощью git log
.Вы можете отменить несколько коммитов.Верните их в обратном хронологическом порядке.Каждый возврат приведет к новой фиксации, которая 'отменяет' шансов от этой фиксации. Если вы обнаружите, что отменяете множество коммитов, вы можете вместо этого выполнить ребазинг.
принудительно подтолкните фиксированную ветвь к центральному репо
- git push -f # возможно, укажите ветку:
origin master
или аналогичную
восстановить оставшуюся работу из «хорошего» клиента, например, с помощью
мастер проверки git # переключиться обратно с RESCUE_THIS
git merge --no-commit --ff RESCUE_THIS
git commit -am
git push #, когда вы действительно удовлетворены результатом
Byтогда вы можете удалить ветку RESCUE_THIS.Даже если вы это сделаете, он фактически не исчезнет, пока не истечет срок действия reflog (s).
Отказ от ответственности: все вышеперечисленное изобилует предположениями о вашей установке, истории ветвлений, рабочем процессе и конкретном сценарии сбоя.Будьте уверены, они образованные догадки и большую часть времени совпадают с обычной практикой. Держите глаза открытыми и подумайте сами. В качестве последнего средства вы можете сделать физическое резервное копирование git-репо на «хорошем клиенте» для безопасности