Можно ли восстановить ветку после ее удаления в Git? - PullRequest
925 голосов
/ 04 сентября 2010

Если я запускаю git branch -d XYZ, есть ли способ восстановить ветку?Есть ли способ вернуться, как будто я не запускал команду удаления ветки?

Ответы [ 17 ]

4 голосов
/ 10 декабря 2014

Я перебросил ветку с пульта, чтобы попытаться очистить несколько коммитов, которые мне не нужны, и собирался выбрать нужные мне.Конечно, я написал SHA неправильно ...

Вот как я их нашел (в основном это более простой интерфейс / взаимодействие с ответами здесь):

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

git fsck --full --no-reflogs --unreachable --lost-found > lost

Это создает файл lost со всеми коммитами, на которые вам нужно будет посмотреть.Чтобы упростить нашу жизнь, давайте вырезать из нее только SHA:

cat lost | cut -d\  -f3 > commits

Теперь у вас есть файл commits со всеми коммитами, которые вам нужно посмотреть.

Предполагается, что вы используете Bash, последний шаг:

for c in `cat commits`; do  git show $c; read; done

Это покажет вам diff и информацию о фиксации для каждого из них.И ждем, пока вы нажмете Введите .Теперь запишите все те, которые вы хотите, и затем выберите их. После того, как вы закончите, просто нажмите Ctrl-C.

2 голосов
/ 06 декабря 2018

БОЛЬШОЕ ДА

если вы используете GIT , выполните следующие простые шаги https://confluence.atlassian.com/bbkb/how-to-restore-a-deleted-branch-765757540.html

, если выс помощью smartgit и уже нажмите эту ветку , перейдите к исходной точке, найдите эту ветку и щелкните правой кнопкой мыши, затем извлеките

1 голос
/ 14 мая 2017

Схожая проблема: я зашел на эту страницу после поиска «как узнать, что такое удаленные ветви».

При удалении многих старых веток я почувствовал, что по ошибке удалил одну из новых веток, ноНе знаю имя, чтобы восстановить его.

Чтобы узнать, какие ветви были недавно удалены, сделайте следующее:

Если вы перейдете на свой URL-адрес Git, который будет выглядеть каккак это:

https://your-website-name/orgs/your-org-name/dashboard

Тогда вы можете увидеть канал, который удален, кем, в недавнем прошлом.

1 голос
/ 19 марта 2016

Добавив к ответу tfe, вы можете восстановить с помощью упомянутого процесса, если только его коммиты не являются сборщиком мусора.Ветвь Git - это просто указатель на определенный коммит в дереве коммитов.Но если вы удалите указатель, а коммиты в этой ветке не будут объединены с другой существующей веткой, то git обрабатывает его как висячие коммиты и удаляет их во время сборки мусора, что может периодически запускаться автоматически.ветвь не была объединена с существующей веткой, и если она была собрана сборщиком мусора, вы потеряете все коммиты вплоть до точки, откуда ветвь была разветвлена ​​из существующей ветки.

1 голос
/ 02 декабря 2014

Сначала перейдите в git batch the move к вашему проекту, например:

cd android studio project
cd Myproject
then type :
git reflog

У вас есть список изменений, и ссылочный номер берет номер ссылки, затем извлекает
из Android Studio или измерзавецдругое решение - взять номер ссылки и перейти к Android Studio. Нажмите на ветки git, затем нажмите на тег проверки или ревизию после ссылочного номера, и тогда у вас есть филиалы.

0 голосов
/ 19 ноября 2018

Просто использование git reflog не вернуло sha для меня. Только commit id (это 8 символов в длину и более длинный)

Так что я использовал git reflog --no-abbrev

А затем сделайте то же самое, что указано выше: git checkout -b <branch> <sha>

0 голосов
/ 07 ноября 2018

Убедитесь, что все это выполняется локально, и подтвердите, что репо находится в желаемом состоянии, прежде чем отправлять в Bitbucket Cloud. Также может быть хорошей идеей клонировать текущее хранилище и сначала протестировать эти решения.

  1. Если вы только что удалили ветку, вы увидите что-то подобное в своем терминале:

    Удаленная ветка (была)

    2.Для восстановления ветки используйте:

    git checkout -b

Если вы не знаете «ша» на макушке головы, вы можете:

  1. Найдите 'sha' для коммита на кончике вашей удаленной ветви, используя:

    git reflog

  2. Для восстановления ветки используйте:

    git checkout -b

Если ваши коммиты отсутствуют в вашем журнале:

  1. Вы можете попытаться восстановить ветку, сбросив ветку до шага коммита, найденного с помощью команды, подобной:

    git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d \ -f3 | xargs -n 1 git log -n 1 --pretty = oneline> .git / lost-found.txt

    2. Затем вы можете отобразить каждый коммит, используя один из них:

    git log -p git cat-file -p

...