--mirror
您可能想尝试使用标志推送一个空的本地存储库(强调我的):
--mirror
不是命名要推送的每个 ref,而是指定 refs/ 下的所有 refs(包括但不限于refs/heads/
、refs/remotes/
和refs/tags/
)都镜像到远程存储库。新创建的本地 refs 会被推送到远端,本地更新的 refs 会在远端强制更新,删除的 refs 会从远端移除。如果设置了配置选项,这是默认remote.<remote>.mirror
设置。
master
如果您的 repo 在 GitHub 上,如果在尝试推送时设置为默认分支,您将收到此错误:
$ mkdir practice; cd practice;
$ git init; git remote add origin git@github.com:user/practice.git;
$ git push origin --mirror
remote: error: refusing to delete the current branch: refs/heads/master
To git@github.com:user/practice.git
! [remote rejected] master (deletion of the current branch prohibited)
error: failed to push some refs to 'git@github.com:user/practice.git'
我通过进行初始提交然后推送来解决这个问题。
强制性警告:当然,这将彻底清除您在远程仓库中的所有历史记录和提交——所有引用、所有分支、所有标签等。确保这确实是您想要做的。当然,在执行此操作之前,您始终可以对远程存储库进行备份克隆,以防出于任何原因想要保留它。
另请注意,实际上不会立即删除任何提交。它们只会变成悬空提交,这意味着它们无法从分支访问。最终它们会被 Git 存储库收集垃圾,但如果您有权访问远程存储库,则可以使用git gc
.