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

Mak*_*kis 45 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
Run Code Online (Sandbox Code Playgroud)

此时他意识到他将错误的东西推送到远程存储库.

我唯一的想法就是从他的repo && git rm && git push中删除一切,这仍然会让错误的提交在那里,但文件不会打扰第二次推送.

Cas*_*bel 68

我想你可能有一个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
Run Code Online (Sandbox Code Playgroud)

远程存储库永远不会返回到no-commits状态,但它会在您想要的地方结束,这就是最重要的!

(在引擎盖下,旧的提交实际上仍然在远程存储库中,但是它们是悬空的,没有任何引用指向它们.当git gc --auto某些点被推动触发时它们将自动被删除.)

如果您确实想要因某种原因清空它,可以receive.denyDeleteCurrent在远程存储库中设置,并推送删除所有分支,包括当前分支.不过,我不明白为什么你真的需要!

  • 由于`--set-upstream`已被弃用,`git branch --set-upstream-to = origin/master master`现在可以完成工作(设置远程) (4认同)
  • @John:`-f`表示`--force`.这是非快进推送所必需的(推入没有分支的先前位置作为祖先的分支). (2认同)

san*_*ule 9

以下步骤将轻松完成此操作,请小心进行主备份以备不时之需。

mkdir  reset
cd reset
 git init
 touch README.md
 git add .
 git commit -m 'Initial commit'
 git remote add origin git@github.com:XXX/xxx.git
 git push --force --set-upstream origin master
Run Code Online (Sandbox Code Playgroud)