git:fatal:无法将分支切换为非提交'12382'

时间:2015-06-19 10:19:18

标签: git git-checkout

我团队中的其他人创建了一个新的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':
...

有人可以建议如何解决这个问题吗?出了什么问题?

4 个答案:

答案 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`
  • tag git checkout V2.0.3
  • 分支(远程分支)git checkout newLogin
  • HEAD git checkout HEAD^1
  • Hash,short Hash。

因此,如果您正在切换到不属于它们的内容,就像您错误输入了分支名称一样,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 开始。