首页 > 解决方案 > 重置命令后强制推送 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

解决方案


您的第一个结帐命令使您处于“分离头”状态——您正在提交,但那里没有分支(“头”)。这意味着您在那里所做的任何提交都在一个未命名的分支上。通常这不是一个好的工作方式,尽管它是可能的。

然后您git reset --hard返回到该提交,但由于没有分支指针,因此没有移动头部。您的工作目录返回提交 586c90,但仅此而已。之后您的提交仍然存在,但没有任何指向它们,因此它们最终将被垃圾收集。请注意,您在这里仍处于“分离头”状态。

现在您尝试进行推送,但您不在分支上。没有分支名称就无法推送;您只会将无名提交推送到远程,并且它们最终也会在那里获得 GCed,因为没有任何东西指向它们。

你应该在这里做的是创建一个分支名称——在 586c90,或者在你的提交的尖端(git log -n10 --all用来查看所有的头,和/或滚动你的 shell 窗口来查看最后的提交 ID,或者git reflog用来查看提交 ID,您将其重置回 586c90)。git checkout -b new-branch应该这样做。一旦你有了一个分支名称,你就可以将该分支推送到你的远程。


推荐阅读