Подтвердить что ты не робот

Как вернуть удаленную ветвь в git?

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

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

  • Инициализировать репозиторий git.
  • зафиксировать несколько изменений в репозитории.
  • включить/выключить текущий рабочий каталог для первой фиксации.
  • удалить главную ветку.
  • тогда я потерял все свои работы, и я не могу поверить в то, что видел. Это реально? Если я буду пьян во время кодирования. Я могу потерять код в git.

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

4b9b3361

Ответ 1

Чтобы избежать проблемы в первую очередь, Jefromi советы в комментариях:

Еще один совет: используйте git branch -d, а не git branch -d.
Вы будете предупреждены, если вы собираетесь удалить что-то, что может заставить вас потерять работу, тогда вы можете подумать, прежде чем использовать -D.
(Или вы можете удалить delete из gitk, чтобы вы действительно видели, что вы удаляете.)

-d

Удалить ветку.
Филиал должен быть полностью объединен в своей ветке вверх или в HEAD, если восходящий поток не был установлен с помощью --track или --set-upstream.


Но если вы "потеряли" свою работу, см. один из много блогов о рефлоге (как Джеймс Киберз предлагает в комментариях):

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 [email protected]{0}: commit: Merged in some code
f5716c8 [email protected]{1}: pull : Fast-forward
d93c27b [email protected]{2}: commit: Added some items to project
...

Теперь reflog не будет показывать точно, где была удалена ветка, но если вы помните свою последнюю фиксацию этой ветки и имеете достаточно подробное сообщение, ее легко найти и восстановить.

Восстановление ветки происходит прямо, проверяя HEAD, в которой вы хотите создать новую ветку.

$> git checkout -b my_new_branch [email protected]{5}

Вы также можете использовать хэш для проверки новой ветки.

$> git checkout -b my_new_branch d93c27b

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