Сохраняет ли github удаленные удаленные ветки в истории? Если да, могут ли они быть восстановлены?
Мне было интересно, есть ли способ восстановить удаленную удаленную ветвь в github. История явно ведет запись ветки и сливается с другими ветвями, но я не уверен, можно ли восстановить удаленную ветку.
Спасибо.
Ответы
Ответ 1
Да, возможно восстановить удаленную ветку из git.
Найдите свой идентификатор Commit ID: найдите ветку с помощью git reflog
Если у вас была ветка в локальном репозитории git за последние 30 дней, вы можете найти ее в рефлоге используя следующее:
git reflog
Найдите имя ветки в рефлоге и обратите внимание на точку HEAD{x}
или идентификатор фиксации.
Восстановить ветку с точки HEAD Reflog:
git checkout -b branch_name [email protected]{27}
Восстановить ветку с идентификатора фиксации:
Вы можете проверить идентификатор фиксации и создать ответвление от этой точки фиксации:
git checkout -b branch_name <commit id>
Ответ 2
Можно запросить поддержку GitHub и заглянуть в reflog
вашего пульта repo (как в этом потоке, например).
Если это значение достаточно близко (менее 30 дней по умолчанию) от удаления, в файле reflog все еще содержатся коммиты, на которые больше не ссылается ни одна ветка.
Создание ветки на одном из этих коммитов позволяет им снова быть доступными.
Подробнее о reflog см. " что это за рефлок и почему это так важно?
Обновление: владелец репо также может запросить API-интерфейсы GitHub:
См. "Сохраняет ли GitHub код фиксации?"
Ответ 3
git reflog
покажет вам историю HEAD
. Если удаленная ветка была названа foo
, тогда в этом выводе должны появиться строки типа 48534f5 [email protected]{0}: checkout: moving from master to foo
или 48534f5 [email protected]{1}: merge foo: Fast-forward
. Вы можете найти вывод git reflog
, чтобы выяснить, какая фиксация должна быть последней, на которую указывает foo.
Имейте в виду, что сам файл "foo" reflog удаляется, когда foo был удален, но поскольку HEAD reflog отличается от него, он все еще существует.
Ответ 4
Взгляните на этот python script для событий github.
https://github.com/jimzucker/githubutils/blob/master/githubreflog.py
Я создал его, чтобы вытащить события и сделать их доступными для чтения, вы можете подключить его к grep и искать интересующую вас ветку. Если есть достаточно истории, вы увидите событие delete для рассматриваемой ветки, следующее строка будет последним событием push, и именно это вас интересует.
Ответ 5
Когда ветка удалена в течение очень долгого времени (в моем случае, 1 год), но вы открыли запрос на перенос для этой ветки, вы можете восстановить ее, выполнив поиск в истории запросов на тягу.
Как только я нашел запрос на перенос для этой ветки, я смог восстановить ветку. Соответствующая информация о фиксации и т.д. Также доступна по запросу pull.