如何重置git推送第一次提交到错误的新回购?

时间:2014-03-12 18:21:41

标签: git github

我犯了一个错误并将错误的github远程存储库添加到项目中,然后推送......只是意识到我刚刚推送到另一个 new 存储库。如何从存储库中清除所有内容并将其返回到空白"状态?

我试过了

git update-ref -d HEAD
git push --force origin

但没有,它只是说"一切都是最新的"。

1 个答案:

答案 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指向该位置。