Git爬坑行 -- 本地切换远程分支

github上clone了一个项目,发现其master是非稳定版本,dev分支才是稳定版本。WTF!那好,就切下分支呗。

输入git branch后,发现本地只有一条master分支啊。什么鬼!

其实,就是git基础不好,少见多怪。咱来分析下。

Git基础恶补

首先,理解下远程分支(remote branch)。远程分支就是对远程仓库的分支的索引。那么什么是远程仓库呢?简单说来,git服务器上的代码仓库就是远程仓库,你本地的代码仓库被称为本地仓库。所以,本地的代码和远程仓库代码根本就是两回事!当然,更新远程分支至本地可以这么进行:

git fetch

当然,如果想查看远程分支情况,试试:

$ git branch -rv
 origin/HEAD   -> origin/master
 origin/dev    c3e4604 nsqd: cleanup gossipDelegate
 origin/master cff5bd4 Merge pull request #725 from ReadmeCritic/master

我们看到远程仓库有2条分支,分别为dev和master分支。这里,我们看到,远程分支一般就采用如下命名规则:(远程仓库名)/(分支名)。此例中,远程仓库名就是origin,而分支名分别为dev和master。那么,当一条是什么鬼?那只是告诉你,现在远程仓库Head指向的是master分支而已,莫慌,年轻人。

那么,本地分支呢?试试:

git branch
* master cff5bd4 Merge pull request #725 from ReadmeCritic/master

我们看到本地仓库只有1条分支master, 而且此条master和远程仓库的master是相同版本的!没错,因为本地仓库的master我们还未做任何modify & commit。

那么,我们怎么在本地仓库中查看远程分支origin/dev呢? 把远程分支origin/dev从远程仓库拉下来吧。试试:

$ git checkout -b local_dev origin/dev
Branch local_dev set up to track remote branch dev from origin.
Switched to a new branch 'local_dev'

再查看下本地分支情况:

 $ git branch -v
* local_dev c3e4604 nsqd: cleanup gossipDelegate
  master    cff5bd4 Merge pull request #725 from ReadmeCritic/master    

果然多了条本地分支local_dev。 如此一来,似乎可以基本远程分支origin/dev进行开发了。

那么,我修改完后如何提交到远程分支呢? 废话不多:

git push origin 本地分支名:远程分支名

再看问题

回到刚开始的问题,为什么本地只有一条master分支呢。简单,因为本地仓库只拉下了远程仓库的Head嘛。把远程分支checkout下来到本地,一切OK!

反思问题

工具要善用。