Во-первых, чтобы избежать проблемы, Jefromi советы в комментариях:
Другой совет: используйте только git branch -d
, а не git branch -D
.
Вы будете предупреждены, если собираетесь удалить что-то, что может привести к потере работы, а затем подумайте, прежде чем использовать -D
.
(Или вы можете удалить из gitk
, чтобы действительно видеть, что вы удаляете.)
-d
Удалить ветку.
Ветвь должна быть полностью объединена в своей восходящей ветви или в HEAD
, если никакие восходящие потоки не были установлены с --track
или --set-upstream
.
Но если вы «потеряли» свою работу, посмотрите один из многих блогов о reflog (как предлагает Джеймс Кибурз в комментариях):
Git Reflog на помощь :
вернуться к списку
Git Reflog на помощь
09 сентября 2010 - написанный Крисом Слоаном | 0 комментариев »
На днях я работал над функцией Real Travel, используя нашу текущую стратегию ветвления, в которой каждый выпускаемый нами релиз является отдельной ветвью.
Не уверен, что это было причиной нехватки сна из-за поздних часов, но Я случайно удалил свою локальную и удаленную копию ветви, прежде чем слить ее обратно в главную ветку для выпуска .
После быстрого состояния шока и мыслей, пробежавших по голове за потерянные часы работы, я успокоился и положился на свои знания Git.
Чтение полной истории коммитов:
Есть два способа прочитать историю коммитов в git. Первый способ показывает список коммитов, в то время как другой показывает лог в ссылке на текущий HEAD
.
// log of detailed commits by users
$> git log
// reference log compared to the current HEAD
$> git reflog
Используя команду reflog
, я смог точно узнать, где была последняя ссылка на мою удаленную ветку.
Пример вывода reflog
может выглядеть так:
c7f3d98 HEAD@{0}: commit: Merged in some code
f5716c8 HEAD@{1}: pull : Fast-forward
d93c27b HEAD@{2}: commit: Added some items to project
...
Теперь в reflog не будет указано, где именно была удалена ветка, но если вы помните свой последний коммит в этой ветке и получили достаточно подробное сообщение, его будет легко найти и восстановить.
Восстановление вашей ветви просто, проверив ГОЛОВУ, которую вы хотите к новой ветви.
$> git checkout -b my_new_branch HEAD@{5}
Вы также можете использовать хеш, чтобы оформить новую ветвь.
$> git checkout -b my_new_branch d93c27b
Достаточно просто, и теперь я могу перейти к фактическому слиянию ветки перед удалением.