Ответ 1
Возможно, вы захотите попробовать пустую локальную репо с --mirror
флагом (выделение мое):
--mirror
Вместо того, чтобы называть каждый ref для push, указывает, что все refs в refs/(который включает, но не ограничивается
refs/heads/
,refs/remotes/
иrefs/tags/
), зеркалируются в удаленный репозиторий. Недавно созданные локальные ссылки будут перенесены в удаленный конец, локально обновленные ссылки будут принудительно обновлены на удаленном конце, а удаленные ссылки будут удалены с удаленного конца. Это значение по умолчанию, если установлен параметр конфигурацииremote.<remote>.mirror
.
Если ваше репо находится в GitHub, вы получите эту ошибку, если при попытке нажать master
установлена ветка по умолчанию:
$ mkdir practice; cd practice;
$ git init; git remote add origin [email protected]:user/practice.git;
$ git push origin --mirror
remote: error: refusing to delete the current branch: refs/heads/master
To [email protected]:user/practice.git
! [remote rejected] master (deletion of the current branch prohibited)
error: failed to push some refs to '[email protected]:user/practice.git'
Я обошел это, сделав начальную фиксацию, а затем нажав.
Обязательное предупреждение: это, конечно, полностью уничтожит всю вашу историю и совершит ваше удаленное репо: все ссылки, все ветки, все теги и т.д. Убедитесь, что это на самом деле то, что Вы хотите сделать. Конечно, вы всегда можете сделать резервный клон своего удаленного репо, прежде чем делать это, если вы хотите сохранить его по какой-либо причине.
Также обратите внимание, что ни один из коммитов не будет удален сразу. Они просто станут болтливыми коммитами, а это значит, что они недоступны из ветки. В конце концов они получат мусор, собранный репозиториями Git, но если у вас есть доступ к удаленному репо, вы можете вручную запустить сборку мусора с помощью git gc
.