假设我在第一次推送远程Git存储库时犯了一个错误。我能以某种方式将其恢复到存储库的初始状态吗?我无法访问远程计算机,因此无法删除.git目录。
问题是,据我所知,你不能“解除”头部。
这就是我所做的(或者实际上是我的一位同事询问了这一点)(我在这里做了一个本地的“远程”repo,这样任何人都可以测试它):
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推送中删除所有内容,这仍然会将错误的提交留在那里,但是文件不会麻烦第二次推送。
发布于 2011-02-08 01:08:49
我想你可能有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远程存储库永远不会返回到无提交状态,但它最终会到达您想要的位置,这才是最重要的!
(在引擎盖下,旧的提交实际上仍然在远程存储库中,但它们仍然悬空,没有引用指向它们。当git gc --auto在某个时刻被推送触发时,它们将被自动删除。)
如果您真的真的想清空它,您可以在远程存储库中设置receive.denyDeleteCurrent,并推送删除所有分支,包括当前分支。不过,我不明白为什么你真的需要这么做!
发布于 2011-02-08 00:11:37
当你说“第一次推送”时,你是指第一次推送到分支吗?因为在你推送它之前,它里面根本没有代码。如果是这样的话…
如果您第一次想要将本地分支foo推送到远程分支,您可以这样做:
git push origin foo:foo为了删除远程分支foo,您告诉git向其推送"nothing“:
git push origin :foo现在,您可以随心所欲地重新开始。
老实说,我不确定服务器上实际剩下了什么--但就完全重置分支历史而言,这是可行的。
(fwiw,我认为这个界面非常可笑)
发布于 2020-03-27 20:17:19
下面的步骤将很容易做到这一点,在需要的情况下要小心进行主备份。
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 masterhttps://stackoverflow.com/questions/4922104
复制相似问题