Можешь сделать резервную копию git reflog? Рекомендации по лучшей практике для защиты от потери кода

git reflog показывает всю активность, даже сдавленные коммиты и т. д. (поправьте меня, если я ошибаюсь).

Есть ли команда git CLI для резервного копирования git reflog?

Очевидно, что если я удалю локальную версию репо, я потеряю свой рефлог (поправьте меня, если я ошибаюсь).

Интересно, смогу ли я git push это для безопасности или что-то в этом роде?

Если нет, какой подход я должен предпринять, чтобы предотвратить потерю рефлога?

Обновление: в ответ на Иржи Кремсера, если я сделаю резервную копию .git/logs могу я git reset --hard любой коммит в reflog после того как я его восстановил?

4 ответа

Решение

git reflog показывает всю активность (даже сдавленные коммиты и т. д.). (поправьте меня, если я ошибаюсь)

Как вы выяснили, git reflog хранит практически все действия в git.
Почти все означает, что он на самом деле не хранит все действия, а хранит все действия, которые изменили ваш HEAD локально

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

Why cant i backup reflog?

Поскольку reflog хранит только релевантную информацию о вашем локальном репозитории, он не будет работать, если вы восстановите его в другое хранилище.

например, рассмотрим этот (очень простой) локальный поток:

# checkout master branch
git checkout master

# do some changes and commit 
- At this point there will be a new entry in the reflog

# now you decide to discard your changes
git reset HEAD~1 --hard
- At this point a new entry is added to your reflog
- The commit which you made is a dangling commit which can be 
  recovered on your local machine but does not exist on any other
  repository beside yours.

Это очень простой поток, но, как вы можете понять из этого потока, даже если вы можете сделать резервную копию reflog (и вы можете просто сделать резервную копию .git/logs) это будет бесполезно.

Есть много других подобных случаев, которые сделают ваш рефлог бесполезным.

Это причина, почему это локально для вашей машины, а не для любой другой машины.

Предположим, что теперь у вас есть моя резервная копия reflog, она бесполезна для вас, если я выполнил rebase, filter-branch и т.п.

И да и нет. Там нет команды для этого, но вы можете сделать резервную копию .git/logs где хранится reflog.

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

В общем, не стоит делать публичный рефлог, потому что он предназначен только для локального репо.

Вы можете думать о рефлоге как о контрольном журнале для всех вещей, которые вы сделали с вашим Git-репозиторием. Это сразу полезно, если вам нужно вернуться и восстановить что-то, что было потеряно с помощью какого-либо процесса, но резервное копирование в долгосрочной перспективе не достигнет всего этого.

Более ценная вещь для резервного копирования - это реальный репозиторий. Потеря тех фактических, конкретных изменений в вашем Git-репозитории абсолютно приведет к потере данных, в то время как потеря reflog, как правило, означает, что вы не можете просмотреть список команд и выяснить, с чего началась перезагрузка. Хотя это бесконечно полезно, когда у вас стабильная среда, если вам необходимо восстановить ее по какой-либо причине, вам действительно следует больше заботиться об общем хранилище.

Поскольку reflog - это только указатели на коммиты, а не фактические данные коммитов, как только ваши коммиты станут достаточно старыми и git запустится git gc (работает бесшумно под прикрытием большинства вещей), фактические коммиты все еще ушли. Вместо того, чтобы создавать резервную копию reflog, вы можете просто засорять ваш код метками веток. Они не только сохранят историю, но также сохранят фактические коммиты. Как только вы будете удовлетворены своей сквош / ребазой / другими деструктивными вещами, удалите эти старые ветви, и git gc с радостью соберет старые данные снова.

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