Почему мой git reflog не возвращается к клону

У меня есть вопрос по поводу git reflog:

в начале моего проекта, когда я делал git reflog, я мог видеть все шаги до моей первоначальной команды git clone.

Сегодня git reflog больше не возвращается к команде git clone.

Точнее, git reflog возвращает 4143 строки, а последние строки усекаются:

$ git reflog
6146d34 HEAD@{0}: checkout: moving from feature/cluster to feature/config
[...]
cb14a86 HEAD@{4140}: checkout: moving from master to demo/20170529
b2ef8d6 HEAD@{4141}: checkout: moving from master to demo/20170529
b2ef8d6 
$ 

Может кто-нибудь объяснить мне, почему?

Есть ли способ получить весь рефлог?

Большое спасибо,

Julien

2 ответа

Как уже отмечали другие, повторные флаги являются временными. Я бы добавил это:

Вы можете отрегулировать настройки конфигурации, которые влияют на то, как долго сохраняются записи reflog, но даже в этом случае вы должны рассматривать их как временные, так как reflogs являются строго локальными, то есть они не отправляются на удаленное устройство одним нажатием (или приходят с удаленного fetch / pull), а лучше отслеживать историю ссылок только на локальном клоне. Таким образом, если вам когда-либо придется заменить локальное репо, вы потеряете все свои рефлоги независимо от того, как настроена ваша конфигурация.

ОБНОВЛЕНИЕ в ответ на следующий вопрос в комментариях: соответствующие настройки (которые описаны здесь: https://git-scm.com/docs/git-config)

gc.reflogExpire
gc.<pattern>.reflogExpire
gc.reflogExpireUnreachable
gc.<pattern>.reflogExpireUnreachable

@TimBiegeleisen это правильно, переполнение периодически опорожняется. Пока в reflog хранятся ссылки на недоступные в противном случае коммиты, они все равно будут оставаться в вашем хранилище. Только когда ссылки на коммиты удаляются из reflog ("expired"), коммиты будут собираться мусором и, следовательно, полностью исчезать. Если этого не произойдет, коммиты из удаленных веток останутся навсегда.

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

Изменить: Найдено здесь:

Reflogs остаются до истечения срока действия (что можно сделать с помощью команды git reflog expire). Значение по умолчанию для недоступных фиксаций - 30 дней (или значение конфигурации gc.reflogExpireUnreachable) или, для достижимых фиксаций, 90 дней (или значение конфигурации gc.reflogExpire).

Это подтверждается здесь, и, как вы можете видеть в примерах, вы также можете установить reflogExpire = never никогда не допускать истечения срока действия доступных записей reflog. Это может, однако, не вернуть уже удаленные повторные журналы, а только предотвратить их удаление в будущем.

Другие вопросы по тегам