为什么git branch没有显示分支?

时间:2017-02-08 14:56:30

标签: git

在Windows 10的cmd中

>git branch
* master

只显示了一个分支,即主分支。 我被告知还有另一个名为“staging”的分支,但我没有看到它。

当我运行以下命令时

>git checkout staging
Branch staging set up to track remote branch staging from origin.
Switched to a new branch 'staging'

然后

>git branch
* master
  staging

为什么暂存分支最初没有显示然后再显示?

感谢。

3 个答案:

答案 0 :(得分:2)

git只列出本地分支,直到您签出远程分支。

git branch -r

还将列出所有远程分支

答案 1 :(得分:2)

注意Git说:

  

切换到 new 分支'staging'

(强调我的)。在您要求Git检查之前,分支staging 不存在。 Git尝试检查它,失败了 - 所以它尝试创建它, 工作。这是git checkout内置的特殊操作:如果您要求按名称签出分支,并且名称与任何现有分支不对应,Git将查看是否存在一个所谓的 remote-使用“足够接近”的名称跟踪分支

要列出这些远程跟踪分支,请使用:

git branch --list --remotes

或将其缩写为git branch -lr。如果您有origin/zerblatt,则可以通过运行zerblatt来创建自己的git checkout zerblatt。如果您没有,git checkout会抱怨zerblatt不是它理解的分支或路径。

在评论中,你问:

  

是[this],因为克隆操作没有拉分段分支,只有主分支?

注意Git的特殊术语:你不要通过克隆“拉”分支。单词pull表示git pull命令,我建议你避免使用它:它是一种方便的捷径,但它会做你不想要的事情。

clone命令默认克隆所有,但它为您自己创建了私有存储库,与其他Git存储库分开。那个其他 Git存储库有自己的分支,现在它们与你的分支不同。为了让它们与您分开,您的Git 重命名所有分支:master成为您的origin/masterstaging成为您的origin/staging

这些origin/*名称是(您的,而不是他们的)远程跟踪分支,并且与其(常规或本地)分支相对应。您自己的本地分支机构 yours 可以随意使用,但最初,Git只创建一个,通常为master

这里真正棘手的是分支实际意味着什么。您可能希望阅读What exactly do we mean by "branch"?(如果您对Git不熟悉,请稍后再保存)。 Git使用了几种不同的东西,它们都被称为“分支”;虽然它们都是相关的,但它们并不相同。

答案 2 :(得分:1)

克隆存储库时,只有一个"正常" (本地)分支在克隆的存储库中创建(在您的情况下为master)。源存储库的其他分支存储为" remote"克隆存储库中的分支。您可以通过添加-r(仅列出 远程分支)或-a(列出本地远程分支)选项来查看它们{{ 1}}。

在您的情况下,它可能看起来像这样

git branch

要创建指向与> git branch -a * master origin/master origin/staging 相同的提交的新本地分支,请运行

origin/staging

或者,同时检查新分支:

> git branch staging origin/staging

torek's answer所示,明确命名> git checkout -b staging origin/staging 是可选的。

引用git-checkout manual

  

git checkout < branch>

     

[...]

     

如果< branch>找不到但是在一个遥控器(称为< remote>)中确实存在一个具有匹配名称的跟踪分支,视为   相当于

origin/stagin

这样做的好处是可以自动设置新的本地分支来跟踪远程分支。