Git Detached HEAD потерял данные
Каким-то образом я закончил с отделенной головой. Я сделал несколько коммитов, и они появились в моей истории коммитов как HEAD (но master
было несколько коммитов позади). Затем я попытался починить отсоединенную головку, проверив master
,
Теперь я не вижу своих предыдущих коммитов в отделенной ГОЛОВЕ. Они ушли навсегда?
3 ответа
[Мои предыдущие коммиты] исчезли навсегда?
Нет. Хотя эти коммиты не отображаются на выходе git log
они все еще существуют в недрах вашего хранилища, и вы все равно можете их извлечь; в таких случаях reflog - это ваша сеть безопасности.
Без дополнительной информации трудно предоставить последовательность команд, которая определенно избавит вас от проблем, но вы можете сделать следующее:
Откройте рефлог вашего
master
ветвь, запустивgit reflog master
Используя сообщения коммитов в качестве подсказок, определите коммит, который вы хотите
master
ветвь для указания; запишите (на листе бумаги) номер соответствующей записи вmaster
reflog. Выход из журнала.Удостовериться
master
текущая ветка:git checkout master
Бежать
git reset master@{<n>}
где
<n>
обозначает номер записи reflog, соответствующий коммиту интереса.
После этого, master
должен указывать на желаемый коммит, как до того, как вы закончили с отсоединенной головой.
Если вы не используете версию Git каменного века, то распечатанные сообщения довольно хороши (это от 2.2.0, но я думаю, что так было с 1.8.X или более ранней версии).
Когда вы впервые вошли в отдельное состояние головы, вам следовало точно сказать, как создать ветку для работы.
Примечание: отметьте "ГОЛОВА ~1".
Вы находитесь в состоянии "отсоединенная ГОЛОВА". Вы можете осмотреться, внести экспериментальные изменения и зафиксировать их, а также можете отменить любые коммиты, сделанные вами в этом состоянии, не влияя на какие-либо ветви, выполнив другую проверку.
Если вы хотите создать новую ветку для сохранения созданных вами коммитов, вы можете сделать это (сейчас или позже), снова используя -b с командой checkout. Пример:
git checkout -b new_branch_name
И когда вы покинули отдельное состояние головы, вы должны были получить это сообщение
Предупреждение: вы оставляете 1 коммит, не связанный ни с одной из ваших веток:
27c4eec foo
Если вы хотите сохранить их, создав новую ветку, это может быть хорошим временем для этого:
git branch new_branch_name 27c4eec
Если вы не видели этих сообщений, вам следует рассмотреть возможность обновления вашей версии Git.
Если вы видели эти сообщения, просто следуйте инструкциям, которые они распечатали.