我把我的git仓库搞砸了,希望有解决方法。我试图升级一个库依赖项,但失败了。我找不到撤消它们的方法,所以我决定回到早期提交,然后从那里开始工作,认为以后会合并。然而,我最终让origin/master与head分离开来,现在无法将任何内容推送到远程仓库。以下是当前状态的屏幕截图:
我对那个分支毫不在意,我只希望它回到它爬出来的洞里。但我无法让它发生。
我尝试像这样还原提交:
git revert 7921869
错误:无法还原,因为您有未合并的文件。
提示:在工作树中修复它们,然后使用“git add/rm”适当地标记解决方案,并进行提交。
致命错误:还原失败
我也尝试推送更改:
git push origin HEAD:master
对于https://xxx@bitbucket.org/xxx/xxx.git,出现了以下错误:! [rejected] HEAD -> master (non-fast-forward)
error: failed to push some refs to 'https://xxx@bitbucket.org/xxx/xxx.git'
提示:因为已推送的分支与远程分支的最新提交不同而被拒绝
提示: 请在再次推送之前检查该分支并与远程更改进行整合
提示:(例如'git pull ...')
如需了解详情,请参阅'git push --help'中有关快进的注释。
git push origin master --force
错误:源引用规范master与任何匹配项都不符。
错误:未能推送一些引用到'https://xxx@bitbucket.org/xxx/xxx.git'
然后我执行了以下操作:
git show-ref
79218694bc34715b3d632dc0057f01fc2df2c842 refs/remotes/origin/master
有人能帮我解决这个问题,让我不再处于分离头状态吗?我需要origin/master
与ddf4a1f提交保持一致,就好像f0dd017和7921869从未发生过一样。如果我只是执行git checkout master
或git checkout e416f24
,那么我会失去4个后续提交,我不能让这种情况发生。
谢谢。
编辑
如果我没有解释清楚,左侧的行是完美的。我只需要使主分支指向该最终提交,以便我可以再次推送到远程。忘记粉色分支。那是垃圾,我不想使用它。
编辑2
我已经按照Tim Biegeleisen的建议进行了操作,我认为我已经接近成功了。现在我有了这个状态:
现在当我执行git push origin master
时,会得到以下结果:
但是,如果我按照消息所说的执行到https://xxx@bitbucket.org/xxx/xxx.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://xxx@bitbucket.org/xxx/xxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
git pull ...
,那么我不会打败整个目的,并且会将来自origin/master
的垃圾带回来吗?我可以只执行
git push origin master --force
吗?
git merge --abort
。 - ryenusgit push origin master --force
会丢弃origin/master
超前于分支点的两个提交,并将master
超前于分支点的四个提交推送到origin
。这正是您想要实现的目标。 - cmaster - reinstate monica