假设我在第一次推送到远程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在远程存储库中设置,并推送删除所有分支,包括当前分支.不过,我不明白为什么你真的需要!
以下步骤将轻松完成此操作,请小心进行主备份以备不时之需。
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)