在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
为什么暂存分支最初没有显示然后再显示?
感谢。
答案 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/master
,staging
成为您的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 < branch>
[...]
如果< branch>找不到但是在一个遥控器(称为< remote>)中确实存在一个具有匹配名称的跟踪分支,视为 相当于
origin/stagin
这样做的好处是可以自动设置新的本地分支来跟踪远程分支。