Сохраняет ли github удаленные удаленные ветки в истории? Если так, могут ли они быть восстановлены? - PullRequest
49 голосов
/ 13 января 2011

Мне было интересно, есть ли способ восстановить удаленную удаленную ветку в github. История четко хранит записи о ветке и сливается с другими ветками, но я не уверен, возможно ли восстановить удаленную ветку.

Спасибо.

Ответы [ 5 ]

51 голосов
/ 13 января 2011

Да, можно восстановить удаленную ветку из git.

Найти свой идентификатор фиксации: Поиск ветки с помощью git reflog

Если у вас была ветка в вашем локальном репозитории git вза последние 30 дней вы можете найти его в журнале рефлексов , используя следующую команду:

git reflog

Найдите название ветки в журнале регистрации и отметьте точку HEAD{x} илиидентификатор фиксации.

Повторное создание ветви из точки заголовка Reflog:

git checkout -b branch_name HEAD@{27}

Повторное создание ветви из идентификатора фиксации:

Вы можете оформить заказидентификатор фиксации и создание ответвления от этой точки фиксации:

git checkout -b branch_name <commit id>
10 голосов
/ 13 января 2011

Можно запросить поддержку GitHub и попросить их просмотреть reflog вашего удаленного репо (, как в этой теме, например ) .
Если это достаточно близко (менее 30 дней по умолчанию) от удаления, reflog по-прежнему содержит коммиты, на которые больше не ссылается ни одна ветвь.
Создание ветки на одном из этих коммитов позволит им снова быть доступными.

Подробнее о reflog см. " Что за черт reflog и почему это так важно? "


Обновление: Владелец репозитория также может запросить API GitHub EVents :
Смотрите " Помнит ли GitHub идентификаторы коммитов? "

3 голосов
/ 13 октября 2017

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

Как только я нашел запрос на извлечение для этой ветви, я смог восстановить ветку. Соответствующая информация о фиксации и т. Д. Также доступна из запроса на извлечение.

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

Взгляните на этот скрипт на python для событий github.https://github.com/jimzucker/githubutils/blob/master/githubreflog.py

Я создал его, чтобы извлекать события и делать их читаемыми, вы можете направить его в grep и найти интересующую вас ветку. Если истории достаточно, вы увидите событие удаления длярассматриваемая ветвь, следующая строка будет последним push-событием, и это то, что вас интересует.

1 голос
/ 10 апреля 2013

git reflog покажет вам историю HEAD.Если удаленная ветвь была названа foo, то в этом выводе вы должны увидеть такие строки, как 48534f5 HEAD@{0}: checkout: moving from master to foo или 48534f5 HEAD@{1}: merge foo: Fast-forward.Вы можете выполнить поиск в выводе git reflog, чтобы выяснить, какой коммит должен быть последним, на который указывает foo.

Вы понимаете, что сам файл журнала "foo" удаляется при удалении foo, но такРефлог ГЛАВЫ отличается, он все еще существует.

...