我犯了一个错误并将错误的github远程存储库添加到项目中,然后推送......只是意识到我刚刚推送到另一个 new 存储库。如何从存储库中清除所有内容并将其返回到空白"状态?
我试过了
git update-ref -d HEAD
git push --force origin
但没有,它只是说"一切都是最新的"。
答案 0 :(得分:1)
当你这样做时:
git update-ref -d HEAD
你告诉git删除你自己的本地存储库中HEAD
指向的分支(例如master
)。 (我在测试回购中尝试了它,并且自己得到了这个结果。我很惊讶!我认为它什么都不做,或者只是删除HEAD
本身;这种行为似乎......充其量只是怀疑。)< / p>
您可能希望在执行任何其他操作之前恢复它。幸运的是,它现在位于远程(origin
):
git fetch origin
git checkout origin/master
现在,至少对于常规(非github)远程存储库而言,剩下的问题是你要删除意外分支,但你不能:
$ git push origin :master
remote: error: By default, deleting the current branch is denied, because the next
remote: error: 'git clone' won't result in any file checked out, causing confusion.
remote: error:
remote: error: You can set 'receive.denyDeleteCurrent' configuration variable t
remote: error: 'warn' or 'ignore' in the remote repository to allow deleting th
remote: error: current branch, with or without a warning message.
remote: error:
remote: error: To squelch this message, you can set it to 'refuse'.
remote: error: refusing to delete the current branch: refs/heads/master
[snip]
您可以登录到远程并配置它(或者只是删除该东西并将其重新初始化为空的回购),如果您有访问权限,但是您没有,那么就这样了。
你可能会问github的人这样做。
更简单的是:什么都不做。您希望该存储库“处于空白状态”,然后您可能希望在那里推送一些其他存储库master
,所以只需:
$ cd .../otherrepo
$ git remote add origin ssh:...
$ git push -f origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 229 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://...
+ 187486a...f9bc6a3 master -> master (forced update)
也就是说,此推送完全覆盖了前一个推送。以前由遥控器中的分支master
识别的所有对象(来自错误的存储库)现在在那里被“放弃”,并且将被垃圾收集。新对象(来自右侧存储库)现在位于远程位置,并由分支名称master
指向该位置。