git
сохраняет историю refs
(читай branches
) в основном для этого вида сценария ios, когда вы хотите получить коммит, который больше не доступен ни из одного из текущих refs
.
Если не прошло достаточно времени или вы явно не указали reflog
записей, срок действия которых истекает, и сборщик мусора может получить историю, выдав git reflog <branch>
вывод изменений в ветвь в форме <sha> <action description leading to changing value of branch>
, начиная с самой последней.
Найдите тот, к которому вы хотите вернуться (вероятно, тот, который был до упомянутого вами коммита), исследуя:
git reflog master
Проверьте это, чтобы дважды проверить содержимое:
git checkout <sha>
Переход к мастеру и reset
мастер к этому коммиту (осторожно, если hard reset
потенциально опасен / проблематичен при неправильном использовании):
git checkout master
git reset --hard <sha>
Некоторые примечания:
Как git-rebase
работает. Это поможет понять, как no longer reachable
может возникнуть во время rebase
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
Также возможно создать еще один коммит поверх rebased
коммита, который эффективно отменяет вытянутую часть , но это менее практично и отмечено только для полноты.