代码之家  ›  专栏  ›  技术社区  ›  Michael

检查分支后分离的头;如何“推动”?[复制品]

  •  1
  • Michael  · 技术社区  · 6 年前

    我是这样做的:

    1. 签出远程Git存储库。

    2. 添加到 [remote "origin] 截面 .git/config :

    fetch = +refs/heads/release/BranchName:refs/remotes/origin/release/BranchName

    1. 签出相应的分支:

    git checkout origin/release/BranchName

    之后 git status 报道:

    头与源/释放/分支名称分离

    1. 添加并签入一些修改。

    2. 试图 git push . 这导致了错误消息:

    致命:您当前不在分支中。推动历史引领 到当前(分离的头部)状态,使用

    git push origin HEAD:<name-of-remote-branch>
    
    1. 然后我按照建议的命令:

    git push origin HEAD:origin/release/BranchName

    得到以下信息:

    错误:无法推送到不合格的目标: origin/release/branchname目标refspec两者都不是 匹配远程服务器上的现有引用,也不以refs/开头,并且我们 无法根据源引用猜测前缀。错误:未能 将一些引用推送到“repositoryname”`

    问题是:我做错了什么?如何解决这一问题并推动变革?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Michael    6 年前

    origin/release/BranchName 包含遥控器的名称( origin )以及远程分支名称( release/BranchName )建议的命令将这些作为单独的参数,因此您应该运行:

    git push origin HEAD:release/BranchName
    

    为了理解出了什么问题,您必须理解在Git中分支并不真正存在;分支只是一些提交的方便指针。对于本地分支,在提交时可以使用一些方便的机制来移动指针,但是使用 遥远的 分支,不会发生这种情况(因为在运行之前不会更新远程指针 push )

    当你跑步的时候:

    git checkout origin/release/BranchName
    

    Git查找了一个远程分支,找到了它指向的提交内容,并检查了该提交。但是,它没有创建或更新任何 地方的 分支,所以当您提交时,没有创建新的指针,只是一堆提交。这就是“分离的头”的意思——你有一些东西签出了,但是它没有“附加”到任何分支上。

    您应该运行的是:

    git checkout -t origin/release/BranchName
    

    或者:

    git checkout release/BranchName
    

    在每种情况下,假设您还没有一个本地分支调用 发布/分支名称 ,Git会计算出你想要的是 新建本地分行 哪个“轨迹”(与 pull 命令)相同名称的远程分支。

    然后,当您提交时,您将提交到一个正常的分支,并且不会得到“分离的头”错误。

        2
  •  -1
  •   eftshift0    6 年前

    要将头推入远程分支,远程分支必须已经存在。当分支在远程端不存在时,我要做的是将任何其他分支推到要创建的远程分支中,然后推头:

    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

    推荐文章