Как reflog и найти удаленные ветки на удаленном [дубликат]

Симон Моурир дал этот пример :

object o = null;
DateTime d = (DateTime)o;  // NullReferenceException

, где unboxing преобразование (литье) из object (или из одного из классов System.ValueType или System.Enum или из типа интерфейса) - тип значения (кроме Nullable<>) сам по себе дает NullReferenceException.

В другом направлении конверсия бокса из a Nullable<>, которая имеет HasValue, равную false , на ссылочный тип, может дать ссылку null, которая затем может привести к NullReferenceException. Классический пример:

DateTime? d = null;
var s = d.ToString();  // OK, no exception (no boxing), returns ""
var t = d.GetType();   // Bang! d is boxed, NullReferenceException

Иногда бокс происходит по-другому. Например, с помощью этого не общего метода расширения:

public static void MyExtension(this object x)
{
  x.ToString();
}

следующий код будет проблематичным:

DateTime? d = null;
d.MyExtension();  // Leads to boxing, NullReferenceException occurs inside the body of the called method, not here.

Эти случаи возникают из-за специальных правил, используемых во время выполнения при боксе Nullable<> экземпляров.

45
задан luisgo 12 January 2011 в 22:25
поделиться

5 ответов

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

Найти свой идентификатор Commit ID: Искать ветку с помощью git reflog

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

git reflog

Искать имя ветки в рефлоге и отметить HEAD{x} или идентификатор фиксации.

Повторно создайте ветку из пункта HEAD Reflog:

git checkout -b branch_name HEAD@{27}

Восстановите ветку с идентификатора фиксации:

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

git checkout -b branch_name <commit id>
49
ответ дан Andreas 4 September 2018 в 07:43
поделиться

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

Поймите, что сам файл foo reflog удаляется, когда foo был удален, но поскольку рефлектор HEAD отличается, он все еще существует.

1
ответ дан Alexander Bird 4 September 2018 в 07:43
поделиться

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

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


Обновление: владелец репо также может запросить API-интерфейсы GitHub: См. « Сохраняет ли GitHub фиксацию идентификаторов? "

10
ответ дан Community 4 September 2018 в 07:43
поделиться

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

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

2
ответ дан Gordon Bean 4 September 2018 в 07:43
поделиться

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

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

1
ответ дан Jim Zucker 4 September 2018 в 07:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: