有没有办法彻底擦除我的远程git存储库?

时间:2014-03-06 00:52:04

标签: git

我知道这是可能的。我很久以前就已经做了,但直到现在我找不到任何正确清空远程存储库的解决方案。

我的目标是: 1.清空远程仓库上的所有东西 2.将本地仓库中的所有文件作为新的启动项目提交

2 个答案:

答案 0 :(得分:2)

这取决于遥控器是否接受快进和修改历史记录。

在这种情况下,您可以进行克隆。注意,使用新的临时本地存储库(同时保留旧的存储库),否则本地存储库也将被清除。

git clone url folder
cd folder

删除整个历史记录中的所有内容

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *' --prune-empty --tag-name-filter cat -- --all

并强行推送到遥控器

git push -f origin

然而,某些遥控器(如BitBucket)允许管理员保护分支免受历史重写或删除,在这种情况下,远程将抛出错误。从您使用遥控器的那一刻起,您将不得不推测遥控器不会滥用您提供的信息。

答案 1 :(得分:1)

如何创建一个全新的存储库,添加一个指向您想要消除的存储库的远程数据库,并强制更新?

cd /folder/with/new/files
git init
git add .
git commit -m 'added files'
git remote add origin URL_TO_REPO_TO_WIPE
git push -u origin master -f

<强>更新

要真正消除所有内容,还有一个步骤:删除除master之外的所有其他远程分支:

git fetch origin
git branch -r | cut -d/ -f2- | grep -v master | xargs -i{} git push origin :{}

我认为现在未提及的旧提交仍将存在。说实话,我不知道它是如何工作的细节。我认为,当远程仓库被定期压缩时,孤立的提交应该被删除,我认为GitHub就是这样做的。如果真的消除所有过时的引用对你很重要,那么你应该从你的回购主机中找到。 (如果您拥有服务器,那么最好自己重新创建仓库,当然,这里的所有讨论都是毫无意义的......)

适用于@zerkms

我测试了使用这些命令在本地删除了提交:

cd /some/repo
git clone --bare . /tmp/oldrepo.git
git init /tmp/newrepo
cd /tmp/newrepo
date > date.txt
git add .
git commit -m start
git remote add origin /tmp/oldrepo.git
git push origin -f
cd ..
git --git-dir oldrepo.git rev-list --all

这最后一步只显示了我强制推送的一个提交。但正如我上面解释的那样,我很确定一些孤立的提交仍然悬在那里,因为我认为你也在暗示。如果你能告诉我如何确认那些会很好的,那么也许我可以改进我的答案。