git - 重置命令后强制推送 git 提交不起作用
问题描述
我用这个检查了
get checkout 586c90b5da800dbc322c097924bb6f80b6d9d5e5
这让我离开了我的头脑,然后我从那里做了很多改变,所以为了让它成为一个头脑,我做了
git reset --hard 586c90b5da800dbc322c097924bb6f80b6d9d5e5
现在如果我这样做
git push
它说
致命:您当前不在分支上。要将历史推送到当前(分离的 HEAD)状态,请使用
git push origin HEAD:<name-of-remote-branch>
如果我做
git push origin header master
它说
错误:src refspec 标头不匹配任何内容。错误:未能将一些参考推送到
'https://github.com/something/somerepo/
如果我这样做
git push origin master -f
它说一切都是最新的。
我怎样才能推动我对 git repo 进行了一些更改的当前头脑(另外,我已经完成了git reset --hard 586c90b5da800dbc322c097924bb6f80b6d9d5e5
)
解决方案
您的第一个结帐命令使您处于“分离头”状态——您正在提交,但那里没有分支(“头”)。这意味着您在那里所做的任何提交都在一个未命名的分支上。通常这不是一个好的工作方式,尽管它是可能的。
然后您git reset --hard
返回到该提交,但由于没有分支指针,因此没有移动头部。您的工作目录返回提交 586c90,但仅此而已。之后您的提交仍然存在,但没有任何指向它们,因此它们最终将被垃圾收集。请注意,您在这里仍处于“分离头”状态。
现在您尝试进行推送,但您不在分支上。没有分支名称就无法推送;您只会将无名提交推送到远程,并且它们最终也会在那里获得 GCed,因为没有任何东西指向它们。
你应该在这里做的是创建一个分支名称——在 586c90,或者在你的提交的尖端(git log -n10 --all
用来查看所有的头,和/或滚动你的 shell 窗口来查看最后的提交 ID,或者git reflog
用来查看提交 ID,您将其重置回 586c90)。git checkout -b new-branch
应该这样做。一旦你有了一个分支名称,你就可以将该分支推送到你的远程。
推荐阅读
- php - Laravel 中未定义的变量
- javascript - 休息成功时req.flash()不起作用
- github - 这是 github 配置文件自述文件错误吗?
- reactjs - 如何在类组件使用的功能性高阶组件中使用 props.children 和 TypeScript?
- django - 如何在 Django 中使用 ajax 从数据库中获取特定列
- json - 将自定义 SELECT 结果转换为 JSON
- python - 循环浏览文件夹中的文件,保持文件所在的顺序
- google-chrome-extension - 与运行在本地网络计算机上的 Web 扩展程序通信
- javascript - 在 OrgChart.js (balkangraph) 的 resultsPanel 中使用 costom 字段名
- python - ax[1] 图未显示