这就是我所做的:
检出远程git存储库。
已添加到[remote "origin]
的{{1}}部分:
.git/config
fetch = +refs/heads/release/BranchName:refs/remotes/origin/release/BranchName
此后git checkout origin/release/BranchName
报告:
HEAD与origin / release / BranchName分离
添加并签入了一些修改。
尝试到git status
。这导致了错误消息:
致命:您当前不在分支机构中。推动历史领先 恢复到当前(分离的HEAD)状态,请使用
git push
git push origin HEAD:<name-of-remote-branch>
并获得以下信息:
错误:无法推送到不合格的目的地: origin / release / BranchName目标refspec都不 匹配遥控器上的现有ref也不以refs /开头,我们 无法根据源引用猜测前缀。错误:失败 将一些引用推送到“ RepositoryName”
这样的问题:我做错了什么?如何解决并推动更改?
答案 0 :(得分:1)
字符串origin/release/BranchName
包含远程名称(origin
)和远程分支名称(release/BranchName
)。建议的命令将这些作为单独的参数,因此您应该运行:
git push origin HEAD:release/BranchName
要了解出了什么问题,您必须了解git中的分支实际上并不存在。分支只是一些提交的便捷指针。使用本地分支,有一些方便的机制可以在提交时移动该指针,但是使用远程分支则不会发生这种情况(因为直到运行{ {1}}。
运行时:
push
Git查找一个远程分支,找出它指向的提交,然后签出该提交。但是,它没有创建或更新任何 local 分支,因此在您提交时,没有创建新的指针,只是一堆提交。这就是“分离的HEAD”的含义-您已签出某些内容,但未“附加”到任何分支。
您应该运行的是这个
git checkout origin/release/BranchName
或者这个:
git checkout -t origin/release/BranchName
在每种情况下,假设您还没有名为git checkout release/BranchName
的本地分支,git会计算出您想要的是一个“新的本地分支”,它“跟踪”(是与release/BranchName
和push
命令相关联)具有相同名称的远程分支。
然后,当您提交时,您将提交到普通分支,并且不会出现“头部分离”错误。
答案 1 :(得分:-1)
为了将HEAD推入远程分支,该远程分支必须已经存在。当分支不在远程端时,我要做的是将其他任何分支推入要创建的远程分支中,然后按下HEAD:
git push some-remote random-local-branch:remote-branch
git push some-remote -f HEAD:remote-branch
或者您可以临时创建一个本地分支,将其推送然后删除该分支
git branch temp
git push some-remote temp:remote-branch
git branch -d temp