[英]git + sourcetree : newly cloned git repo is not allowing to switch branches
[英]cloned repo, its branches and git checkout
我从github克隆了一个带有2个分支的repo:
git clone https://github.com/user/repo
cd repo
当我做一个git branch
,它只显示主分支。 然后我做了一个git branch -a
它显示了所有分支。
master
remotes/origin/HEAD
remotes/origin/master
remotes/origin/develop
然后我做了一个git checkout develop
:
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
然后git checkout master
回到master
分支。
为什么git checkout develop
与git checkout origin/develop
(它说我处于独立头状态)?
你应该做的:
git checkout --track -b develop origin/develop
# or
git checkout -t origin/develop
从git checkout
:如果你没有指定一个起点,它从当前的HEAD
开始(在你的情况下是master
,意味着你的'develop'分支不是从你认为应该的地方开始)。
在--track选项中,请参阅“ Git:什么是跟踪分支? ”。
如果要查看/跟踪本地存储库中的所有远程分支 ,请参阅“将所有远程git分支跟踪为本地分支 ”。
你的起点是高手,因为你的git分支返回了当前的分支:master。
如果您在那里进行git checkout
开发,它将从当前分支开始。
当你说git checkout develop(没有指定远程“ origin
”)时,它会尝试签出一个名为develop
的本地分支。 但是你的gitconfig是这样设置的,如果它找不到具有该名称的本地分支,它将自动查找origin/develop
。 它发现并检出了一个名为develop
本地的新分支,并自动将其设置为跟踪远程分支。
当你git checkout origin/develop
,你正在检查你的上游develop
分支的缓存副本。 您无法编辑这些分支。 这就是为什么git告诉你你处于一个独立的头状态。
如果你想进行更改,你需要提交到本地develop
分支,然后进行git push
。
您还没有创建分支'develop'。 为此,您需要创建一个遵循“origin / develop”分支的分支:
git checkout -b develop origin/develop
新分支'develop'与远程分支'origin / develop'分离。 git故意这样做:去耦允许分支独立变化。 出于多种原因这是可取的,但我发现最有用的两个是:
您可以进行一系列更改,这些更改与github分支中所做的更改无关。
除非您希望这些更改,否则github存储库中所做的更改不会自动合并到您的分支中。 例如,如果“origin / develop”具有特别不稳定的历史,您可能希望控制何时将新更改合并到本地分支“develop”中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.