尝试签出我的系统上还不存在的远程分支。就这个问题而言,我的系统上没有三个分支机构。
git branch -r显示远程上相关分支的列表:
origin/V2.0005B2
origin/V2.0005B3
origin/V2.0005B4我可以很好地运行git checkout V2.0005B2或git checkout V2.0005B4,它会创建一个本地副本并将其设置为跟踪。
但是当我尝试运行git checkout V2.0005B3时,它每次都会使我处于一个独立的头部状态。在我试过的每台机器上都会发生这种情况。
SourceTree可以检出这个分支以及git叉子。但是Git命令行存在这个问题。
我只希望这个分支没有什么问题,否则,只要它最初使用其他工具之一被检出,它就会正常工作。这个分支住在BitBucket,我在那里登录看看是否能看到什么不寻常的东西,但它看起来和其他的一样。
谢谢,戴夫
发布于 2021-04-27 21:13:57
检查您的本地标签:
git tag --list如果您有一个名为V2.0005B3的标记,那么运行git checkout V2.0005B3将导致您的情况:在该标记指向的提交上,出现一个分离的HEAD状态。
git checkout -b V2.0005B3
git branch -u origin/V2.0005B3
# or shorter suggested by @torek :
git checkout --track origin/V2.0005B3# delete your local tag :
git tag -d V2.0005B3
# delete the remote tag :
git push -d origin refs/tags/V2.0005B3如果这是一个共享的回购,告诉您的所有同事也删除他们的本地标记;这将避免在他们的机器上的令人惊讶的行为,并减少该标记在中央回购上的可能再现。
发布于 2021-04-28 02:12:46
LeGEC的答案是正确的到目前为止,但我要补充两点。第一个是关于如何得到你想要的,第二个,更长的点,描述了另一个失败案例,还有另一个绕过它的技巧。
首先,还有一种方法可以从相当短的远程跟踪名称创建本地分支,即使用git checkout (或git switch)和--track选项和远程跟踪名称:
git checkout --track origin/V2.0005B3此特定表单定位远程跟踪名称(完全拼写refs/remotes/origin/V2.0005B3),发现它确实是远程跟踪名称(以refs/remotes/开头),应用--track选项提取refs/remotes/origin部件以生成V2.0005B3,然后使用分支创建选项(-b for git checkout,-c for git switch)创建已设置的V2.0005B3上游origin/V2.0005B3。
第二:造成此问题的通常原因是Git首先查找标记,因为存在这样的标记:
git checkout代码首先尝试将其命名为现有分支的名称--即尝试在前面添加refs/heads/,以查看结果是否将解析为提交散列ID。如果是,这是一个现有的分支名称,因此是一个切换到现有分支的请求。git checkout在进入六步过程之前执行了它自己的私有步骤-4)。--no-guess选项。(在Git 2.21中这个选项是新的。)但是这个自动创建--guess模式还有一种失败的方法,那就是如果有两个或更多的远程跟踪名字候选人。因此,比方说,如果同时存在origin/V2.0005B3和upstream/V2.0005B3远程跟踪名称,则猜测模式不知道使用哪个名称。
--track选项告诉Git使用哪一种方法,从而巧妙地避开了这一困境。还有另一个技巧,在Git 2.19中也是新的:如果有多个匹配项,checkout.defaultRemote会告诉git checkout和git switch中的--guess代码哪个是远程的。因此,除了--track之外,如果问题是具有相同分支名称的多个远程处理程序,则可以配置首选的remote,以便选择正确的远程跟踪名称。
https://stackoverflow.com/questions/67288369
复制相似问题