是否可以完全清空远程Git存储库?

假设我在第一次推送到远程Git存储库时犯了一个错误。 我可以以某种方式还原它,以使存储库恢复到其初始状态吗? 我无权访问远程计算机,因此无法删除.git目录。

据我所知,问题是您无法“重置”头部。

这是我(或实际上是询问此问题的同事)所做的(我在这里进行本地“远程”回购,以便任何人都可以测试):

mkdir git-remote
cd git-remote
git init --bare
cd ..
mkdir git-local
cd git-local
git clone ../git-remote .
touch a
git add a
git commit -m "initial"
git push origin master

此时,他意识到自己将错误的内容推送到了远程存储库中。

我唯一的想法是从他的repo && git rm && git push中删除所有内容,这仍然会保留错误的提交,但文件不会再麻烦第二次了。

Makis asked 2020-08-09T12:01:53Z
4个解决方案
67 votes

我认为您可能有XY问题。 实际上,您无需重新启动远程存储库即可重新开始。 您只需要从本地重新开始,然后将其强制推到远程即可。

# create a new repository that has the initial commit that you want
mkdir foo; cd foo; git init; ...; git commit

# set up a remote
git remote add origin <url-of-remote>
git branch --set-upstream master origin/master

# push your new history
git push -f

# delete obsolete remote branches
git push origin :deprecated-branch

远程存储库永远不会返回到无提交状态,但最终会在您需要的位置结束,这就是所有问题!

(在内部,旧的提交实际上仍在远程存储库中,但是它们悬空了,没有引用指向它们。当在某个时候通过推送触发receive.denyDeleteCurrent时,它们将被自动删除。)

如果您确实确实要出于某种原因将其清空,则可以在远程存储库中设置3003739293293333586944,并推送删除所有分支,包括当前分支。 不过,我不明白您为什么真正需要这样做!

Cascabel answered 2020-08-09T12:02:12Z
1 votes

当您说“首次推送”时,您是说有史以来第一次推送至分支机构吗? 因为在推送之前根本没有任何代码。 如果是这样的话...

如果您想第一次将本地分支foo推送到远程分支,则可以执行以下操作:

git push origin foo:foo

为了删除远程分支foo,您告诉git向其中推送“ nothing”:

git push origin :foo

现在,您可以根据自己的喜好从头开始。

老实说,我不确定服务器上实际保留的内容是什么,但是就完全重置分支历史而言,这是可行的。

(首先,我认为这个界面非常荒谬)

John Bachir answered 2020-08-09T12:02:55Z
0 votes

清空GitHub存储库的最佳方法。

第1步:创建新分支。git push origin --delete <your_branch>

第2步:将数据添加到其中。

git push origin --delete <your_branch>

git push origin --delete <your_branch>

git push origin --delete <your_branch>

步骤3:现在删除旧的master分支。

git push origin --delete <your_branch>

Mayank Dudakiya answered 2020-08-09T12:03:28Z
-3 votes

您可以提交.git,例如 git revert HEAD

请记住,您提交的内容将位于.git目录中。 (您对此无能为力)

如果不访问.git目录,就不可能从历史记录中实际删除提交。

deleted77 answered 2020-08-09T12:03:57Z
translate from https://stackoverflow.com:/questions/4922104/is-it-possible-to-completely-empty-a-remote-git-repository