Я думаю, что подход clone --mirror
стоит оглянуться назад.Если вы хотите восстановить предыдущую позицию ветви, которая была принудительно нажата, просто посмотрите на повторные журналы.Чтобы быть абсолютно уверенным в этом, вы можете установить gc.pruneExpire
на never
, и то же самое для gc.reflogExpireUnreachable
, так что повторные флажки и недоступные объекты никогда не будут удалены.Это должно покрыть тебя.Важное примечание: рефлоги по умолчанию отключены в пустых репозиториях.Вы можете включить их, установив core.logAllRefUpdates
.
. Обратите внимание, что повторные журналы в репозитории push-to будут содержать записи о любых принудительных изменениях, которые происходят.Если вы хотите быть еще более уверенным в этом, вы могли бы даже написать хук обновлений, который обнаруживает входящие принудительные обновления и записывает их где-то особенное, возможно, создавая ссылку, что-то вроде refs/backups/mybranch-{n}
.
И действительнонет ничего плохого в том, что некоторые ветви часто перебазируют, если они четко определены, так что никто не будет застигнут врасплох.Ветвь pu
в git.git является прекрасным примером этого.