【问题标题】:Detached HEAD after checking out a branch; how to `push`? [duplicate]签出分支后分离 HEAD;如何“推”? [复制]
【发布时间】:2019-02-22 17:12:09
【问题描述】:

这就是我所做的:

  1. 签出远程 git 存储库。

  2. 添加到.git/config[remote "origin]部分:

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

  1. 查看了对应的分支:

git checkout origin/release/BranchName

之后git status 报告:

HEAD 与 origin/release/BranchName 分离

  1. 添加并检查了一些修改。

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

致命:您当前不在分支上。推动历史领先 现在到当前(分离的 HEAD)状态,使用

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

git push origin HEAD:origin/release/BranchName

得到以下结果:

错误:无法推送到不合格的目的地: origin/release/BranchName 目标 refspec 既不是 匹配遥控器上的现有 ref 也不以 refs/ 开头,我们 无法根据源参考猜测前缀。错误:未能 将一些引用推送到“RepositoryName”

因此问题是:我做错了什么?如何解决这个问题并推动更改?

【问题讨论】:

  • 您尝试推送的远程分支没有本地对应项吗?
  • 运行 git checkout release/2018/MDP.2018.03(删除 origin/ 部分)。使用足够新的 Git 版本,这将创建一个 本地 分支来跟踪同名的远程分支。

标签: git git-detached-head


【解决方案1】:

字符串origin/release/BranchName 包含远程名称(origin)和远程分支名称(release/BranchName)。建议的命令将这些作为单独的参数,因此您应该运行:

git push origin HEAD:release/BranchName

要了解出了什么问题,您必须了解在 git 中,分支并不真正存在;分支只是指向某个提交的方便指针。对于本地分支,有一些方便的机制可以在您提交时移动该指针,但是对于 remote 分支,这不会发生(因为在运行 @ 之前不会更新远程指针987654325@)。

你跑的时候:

git checkout origin/release/BranchName

Git 查找了一个远程分支,找出它指向的提交,并检查了该提交。但是,它没有创建或更新任何 local 分支,因此当您提交时,没有创建新指针,只是一堆提交。这就是“分离的 HEAD”的意思——你已经检查了一些东西,但它没有“附加”到任何分支。

你应该运行的是这样的:

git checkout -t origin/release/BranchName

或者这个:

git checkout release/BranchName

在每种情况下,假设您还没有一个名为 release/BranchName 的本地分支,git 会计算出您想要的是一个 新的本地分支,它“跟踪”(与对于pushpull 命令)同名的远程分支。

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

【讨论】:

  • 谢谢,git push origin HEAD:release/BranchName 工作。
  • @Michael 我刚刚添加了一些关于如何避免将来进入“分离头”状态的更多细节。你现在最好的选择是从你的“分离的头”推送一次,然后通过使用checkout -t检查远程分支重新开始
  • 谢谢,成功了。
  • 谢谢你……为我工作。我刚刚写了 push origin 命令,它起作用了
【解决方案2】:

为了将 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2021-08-30
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2015-06-03
    相关资源
    最近更新 更多