[GitHub]第三讲:简单分支操做


Git 最核心的操做对象是版本( commit ),最核心的操做技巧就是分支。html

什么是分支?

仓库建立后,一旦有了新 commit,默认就会放到一个分支上,名字叫 master。前面我们一直看到的多个版本组成的一条历史线,就是 master 分支。可是一个仓库内,用户能够本身建立其余的分支,能够有多条历史线。git

说说 master 这个名字,通常中文叫“主分支”,其实从技术底层来说它跟其余咱们本身要建立的分支没有区别,只不过它是天生的默认分支。实际工程项目中会人为的给它一个重要的使命,存放稳定代码。就像 github 公司倡导的。github

master 分支上的全部代码都应该是能够部署的服务器

意思就是 master 分支上的代码是随时能够放到产品服务器上跑的代码。这样,若是想开发一个新功能,能够新开分支。 想象一下历史线上有不少节,每一个版本就是一节。一个分支至关于一跟竹子,一节节的往上长。编辑器

可是实际上在底层并非每一个分支都拷贝出本身独立的一条历史线。其实 master 自己只是一个指针,指向 master 分支上最新的一个版本。这样因为每一个 commit 均可以顺藤摸瓜找到本身的前一个 commit,那么这条历史线就能够肯定了。ide

建立新分支

何时须要开一个新分支,这个后面讲各类工做流程的时候会介绍,今天先把基本操做学会。 到客户端的Branches 这一项测试

点击1处的加号,就会弹出2处的对话框。Create a new branch off master 就是来建立一个分支。在对话框中填入 idea,建立了 idea 分支的。所谓 off master 意思是“基于 master ”分支,因此此刻 idea 分支并不为空,而是拥有和 master 同样的历史。以下图,箭头所指的小对勾表示“当前分支”( current branch )已经自动切换到 idea 分支。idea

可是,在底层这个的实现是很是巧妙的,就是又建立一个新的 idea 指针,跟 master 指针指向同一个版本,根本没有拷贝历史线。spa

若是如今我对项目作一下修改,而后 commit 了。那么移动的只是 idea 指针,master 不变。就成了这样:指针

如今 master 分支包含两个版本 C1 和 C2,idea 分支包含三个版本 C1,C2,C3 。

默认状况下这个 idea 分支只是存在于本地,若是想在远端仓库上发布这个分支,就点一下 idea 分支右侧的Publish 按钮。

这样,到远端仓库看一下,点击下图1处,发现果真2处多了一个 idea 分支,3处的输入框中,不但能搜索已有分支,还能建立新分支,看到了吧,不少操做在本地客户端和 github.com 上都能进行。

切换分支

到 branches 标签下,相中哪一个分支了,双击一下就切换过去了。时间长了你会以为这个也不够快,仍是纯键盘操做快。敲 Cmd-B 能够打开分支切换框,输入名字回车,就切换成功了。

若是你在 idea 分支上有了修改可是尚未来得及 commit,这时候若是切换分支,那么 git 会替你保存这部分修改,也就是在切换到的分支上是看不到这部分修改的。可是不要担忧,只要你切换回老分支,修改内容又回来了。

注意,每次切换分支,项目代码,术语叫工做树( Working Tree )是会随着变化的,在编辑器中看看就知道了。

删除分支

首先当前分支是不能删除的。什么意思?到客户端的 Branches 标签下,左侧有对勾的就是当前分支,打开右侧小箭头的下拉菜单,能够看到 delete 这一项是禁用的。想删除它,就先要切换到其余分支,例如 master。这样就能够删除 idea 分支了,若是执行本地删除 github.com 上对应分支也会同时被删除。

在客户端把分支切换到 idea,如今试图去删除 master 。点开 master 分支的小箭头,发现 delete 一项能够点,因此点一下,可是报错了:“”master” is the repository’s default branch and cannot be deleted.` 要到 github.com 上修改默认分支( default branch 注意跟当前分支是不一样的),就像这样。

在远端仓库,也就是 github.com 上如何切换默认分支呢?到 settings 下面就更改 Default branch 就能够了。

若是只想删除远端分支,保留本地分支,能够在客户端中使用每一个分支右侧的 Unpublish 这个选项。

总结

只开测试分支,调好代码 commit 了以后,若是不把代码搞到 master 分支上是没有太大意义的,这就涉及到分支合并的问题了,这个是 git 最大最强的一块功能,后面介绍。