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

时间:2013-08-07 20:15:26

标签: git

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

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

不要告诉我不应该这样做,或者我们必须告知所有用户等。我知道这一切。 我只想重新开始

2 个答案:

答案 0 :(得分:34)

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

--mirror
     

指定将refs /(包括但不限于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'

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

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

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

答案 1 :(得分:-1)

你不能这样做。你可以做的最好的是删除所有引用,并希望服务器运行git gc并具有没有任何引用的修剪对象的设置。这取决于服务器配置。

通常需要14天才能通过git gc删除对象。但是,如果您尝试克隆存储库,则不会克隆这些对象。

你已经有一个很好的答案,如何做一个“黑客”删除所有裁判。它很有效,你的回购将会出现,因为它是“新鲜的”。但事实并非如此。