21

我已经阅读并尝试了很多 Git 命令建议和讨论,现在已经持续了几天。似乎真的没有简单、全面的方法可以让远程 Git 存储库完全清空——没有分支、没有引用、没有对象、没有文件、没有任何东西

是的,我认识到可以删除并重新创建存储库——如果有人对源具有这种权限(我没有),但这不是重点。它是如何完成的?什么样的 Git 命令组合实际上会做到这一点,让 repo 处于原始状态,准备好接收我们希望推送到其中的任何内容,并且基本上没有大小(或原始 repo 的最小大小)

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

4

2 回答 2

34

--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.

于 2013-08-07T20:27:49.813 回答
-1

你不能这样做。您可以做的最好的事情是删除所有 refs 并希望服务器运行 git gc 并为没有任何 refs 的 prune 对象设置设置。这取决于服务器配置。

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

您已经对如何进行“破解”以删除所有参考有一个很好的答案。它可以工作,并且您的回购将出现在您面前,因为它是“新鲜的”。然而事实并非如此。

于 2013-08-08T00:44:31.183 回答