Как вернуть удаленную ветку в git? - PullRequest
35 голосов
/ 04 апреля 2011

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

Ниже приведены шаги, которые я сделал:

  1. Инициализировать репозиторий git.
  2. совершить несколько изменений в хранилище.
  3. переключение / извлечение текущего рабочего каталога для первого принятия.
  4. удалить основную ветку.
  5. потом я потерял все свои работы и не могу поверить в то, что увидел. Это реально? Если я пьян во время кодирования. Я мог потерять код в git.

Вопрос в том, как откатить действие по удалению ветки? Или, Как я могу получить всю историю в git, даже что-то, что исчезло в журнале?

1 Ответ

67 голосов
/ 04 апреля 2011

Во-первых, чтобы избежать проблемы, 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

Достаточно просто, и теперь я могу перейти к фактическому слиянию ветки перед удалением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...