重置命令后强制推送git提交不起作用

时间:2019-06-23 14:03:01

标签: 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

1 个答案:

答案 0 :(得分:1)

您的第一个签出命令将您置于“分离头”状态-您正在提交,但是那里没有分支(“头”)。这意味着您在那里进行的所有提交都在一个未命名的分支上。通常,虽然可行,但这并不是工作的好方法。

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

现在,您尝试进行推送,但是您不在分支上。没有分支名称就无法推送;您只会将无名的提交推送到远程,并且它们最终也会在那里被GC,因为没有指向它们的消息。

您应该在这里创建一个分支名称-在586c90或提交的尖端(使用git log -n10 --all查看所有标题,和/或滚动浏览Shell窗口以查看最后一个)提交ID,或使用git reflog查看将提交ID重置回586c90的提交ID)。 git checkout -b new-branch应该这样做。有了分支名称后,您可以将该分支推送到您的遥控器。