好的,所以我在GitHub上有一个fork for repo,而且我分叉后它的上游repo还没有更新。昨天,我创建了一个基于最后一次上游提交的分支,这是在我几个月前分配回购之前制作的。
我在分支上做了一个错误的提交,所以我尝试在我的本地分支实例上使用git push -f origin HEAD^:master
来撤消它,但正如您所看到的,我忘了将master
更改为分支的名称。所以它最终覆盖了我迄今为止在主人身上所做的一切。
我的问题是,有没有办法解决这个混乱,所以我可以让主人回到这个特定推动之前的状态?
我经常使用TortoiseGit和TortoiseSVN,在Git的任何组件之前我都看不到我在主服务器上做过的任何事情,但是我仍然可以在SVN trunk的历史日志中看到我之前的所有提交。我之前没有一个干净的本地主实例。
我尝试了git reset --hard <last good commit hash>
或git push -f origin <last good commit hash>:master
之类的内容,但它表示不存在使用此类哈希的提交。我仍然可以从浏览器历史记录访问GitHub上的所有先前提交。
下游没有任何东西,所以不用担心。
任何提示?
答案 0 :(得分:6)
好的,这是我如何从分支的本地实例修复它:
git log --graph --oneline --all
检索最后一个好提交的哈希git reset --hard <last good commit hash>
git push origin +master
答案 1 :(得分:0)
尝试git reflog
。它会记住如果你没有完成git gc
,可能会丢失旧的提交哈希值。