我团队中的其他人创建了一个新的git分支,提交并推送到我们使用的常用遥控器。当我试图查看这个分支时,我明白了:
% git checkout 12382
fatal: Cannot switch branch to a non-commit '12382'
我在查看此存储库中的其他分支时遇到了麻烦;尝试在此之后检查另一个(我没有本地副本),并且它工作正常。
我尝试在Go管道上使用此分支构建服务器,它工作正常 - 这意味着服务器成功检出了该分支。
尝试检查事物的状态:
% git remote show origin
* remote origin
Fetch URL: git@gitlab.mycompany.com:mycompany/myrepository.git
Push URL: git@gitlab.mycompany.com:mycompany/myrepository.git
HEAD branch: stage
Remote branches:
10112 tracked
10198 tracked
10678 tracked
...
12382 tracked <<<---
...
Local branches configured for 'git pull':
...
Local refs configured for 'git push':
...
有人可以建议如何解决这个问题吗?出了什么问题?
答案 0 :(得分:20)
Git很困惑,因为12382
看起来像提交哈希。使用完全限定名称签出分支:
git checkout refs/heads/12382 --
或者,如果它是一个远程分支:
git checkout refs/remotes/origin/12382 --
答案 1 :(得分:11)
@ knittl:谢谢你的工作,不得不做以下额外的步骤:
% git checkout refs/remotes/origin/12382
Note: checking out 'refs/remotes/origin/12382'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at 2d834e4...
% git branch | grep 12382
* (detached from origin/12382)
% git checkout -b 12382
Switched to a new branch '12382'
% git status
On branch 12382
nothing to commit, working directory clean
% git push --set-upstream origin 12382
Branch 12382 set up to track remote branch 12382 from origin.
Everything up-to-date
答案 2 :(得分:0)
问题是一个边缘案例,它已经得到了解答。
我会在更一般的层面上回答错误:
为了能够切换/签出到源树中的某些内容,它必须是类型:
git checkout: 90392aeda17d730d472493bc5a36237407c80979
或者只是做前7位``git checkout:90392ae` git checkout V2.0.3
git checkout newLogin
git checkout HEAD^1
因此,如果您正在切换到不属于它们的内容,就像您错误输入了分支名称一样,git会给您这个错误。
无法将分支切换为非提交意味着您认为您正在尝试结帐但不是tree-ish
答案 3 :(得分:0)
% git switch -t origin/12382
Branch '12382' set up to track remote branch '12382' from 'origin'.
Switched to a new branch '12382'
这似乎对我有用。我曾经使用 git checkout
但我现在可能会开始使用 git switch
来更改分支。
在我的例子中,有人使用错误跟踪系统工单号作为没有字母前缀的分支名称。
git switch
从 git 2.23 开始。