从远程Git仓库删除或删除所有历史记录,提交和分支?

Sta*_*dog 21 git

我已经阅读并尝试了很多Git命令建议和讨论,现在持续了好几天.似乎没有简单,全面的方法来使远程Git repo完全变空 - 没有分支,没有引用,没有对象,没有文件,没有任何东西.

是的,我认识到可以删除并重新创建回购 - 如果一个人对原点有这种权限(我没有),但这不是重点.怎么做?Git命令的哪些组合实际上会做到这一点,让处于处女状态的repo准备接收我们希望推入它的任何东西,并且基本上没有大小(或者处女回购的最小尺寸)

不要告诉我不应该这样做,或者我们必须通知所有用户等.我知道这一切. 我只是想彻底开始.

小智 34

您可能想尝试用--mirror标志推送一个空的本地仓库(强调我的):

--mirror
Run Code Online (Sandbox Code Playgroud)

代替命名每个裁判推,则指定下参/所有参考文献(包括但不限于refs/heads/,refs/remotes/refs/tags/)被镜像到远程存储库.新创建的本地引用将被推送到远程端,本地更新的引​​用将在远程端强制更新,并且已删除的引用将从远程端删除.如果remote.<remote>.mirror设置了配置选项,则这是默认设置.

如果您的仓库在GitHub上,如果master在尝试推送时设置为默认分支,则会出现此错误:

$ 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'
Run Code Online (Sandbox Code Playgroud)

我通过初始提交然后推送来解决这个问题.

强制性警告:当然,这将完全消除您的所有历史记录并提交您的远程回购 - 所有引用,所有分支,所有标记等.确保这实际上是您想要做的.当然,在执行此操作之前,您始终可以创建远程仓库的备份克隆,以防您因任何原因想要保留它.

另请注意,实际上不会立即删除任何提交.他们只会变成悬挂的提交,这意味着他们无法从分支机构到达.最终他们会被Git repos收集垃圾,但是如果你有权访问你的远程仓库,你可以手动启动垃圾回收git gc.