我知道这是可能的。我很久以前就已经做了,但直到现在我找不到任何正确清空远程存储库的解决方案。
我的目标是: 1.清空远程仓库上的所有东西 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
这最后一步只显示了我强制推送的一个提交。但正如我上面解释的那样,我很确定一些孤立的提交仍然悬在那里,因为我认为你也在暗示。如果你能告诉我如何确认那些会很好的,那么也许我可以改进我的答案。