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