[GitHub]第三讲:简单分支操作
Git 最核心的操作对象是版本( commit ),最核心的操作技巧就是分支。
什么是分支?
仓库创建后,一旦有了新 commit,默认就会放到一个分支上,名字叫 master。前面咱们一直看到的多个版本组成的一条历史线,就是 master 分支。但是一个仓库内,用户可以自己创建其他的分支,可以有多条历史线。
说说 master 这个名字,一般中文叫“主分支”,其实从技术底层来讲它跟其他我们自己要创建的分支没有区别,只不过它是天生的默认分支。实际工程项目中会人为的给它一个重要的使命,存放稳定代码。就像 github 公司倡导的。
master 分支上的所有代码都应该是可以部署的
意思就是 master 分支上的代码是随时可以放到产品服务器上跑的代码。这样,如果想开发一个新功能,可以新开分支。 想象一下历史线上有很多节,每个版本就是一节。一个分支相当于一跟竹子,一节节的往上长。
但是实际上在底层并不是每个分支都拷贝出自己独立的一条历史线。其实 master 本身只是一个指针,指向 master 分支上最新的一个版本。这样由于每个 commit 都可以顺藤摸瓜找到自己的前一个 commit,那么这条历史线就可以确定了。

创建新分支
什么时候需要开一个新分支,这个后面讲各种工作流程的时候会介绍,今天先把基本操作学会。 到客户端的Branches 这一项

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

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

如果现在我对项目做一下修改,然后 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 最大最强的一块功能,后面介绍。
[GitHub]第三讲:简单分支操作的更多相关文章
- GitHub学习心得之 分支操作
目录 前言 1. 一般的push和pull 2. 分支操作 前言 本文对Github的分支操作进行了总结, 主要基于以下文章: http://blog.csdn.net/guang11cheng/ar ...
- 05.GitHub实战系列~5.发布版本之分支操作+Tag讲解 2015-12-14
GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...
- github 的分支操作
首先需要当前目录设置为仓库目录 一.创建本地分支 1.查看有哪些分支:git branch 2.创建一个分支:git branch name ,其中name是分支名 3.切换到分支:git chec ...
- 从0开始学习 GITHUB 系列之「GITHUB 常见的几种操作」【转】
本文转载自:http://stormzhang.com/github/2016/09/21/learn-github-from-zero8/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...
- 从0开始学习 GitHub 系列之「07.GitHub 常见的几种操作」
之前写了一个 GitHub 系列,反响很不错,突然发现竟然还落下点东西没写,前段时间 GitHub 也改版了,借此机会补充下. 我们都说开源社区最大的魅力是人人多可以参与进去,发挥众人的力量,让一个项 ...
- github新建Repositories后具体操作步骤
添加用户信息 第一个要配置的是你个人的用户名称和电子邮件地址.这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录: 1 2 git c ...
- 利用github pages创建简单的网站
github.com 作为最流行的源代码管理工具已经风靡全球,同时在依托于github也衍生出了各种各样的应用,比如可以利用github搭建博客系统等等. 先换个话题,我们每人手头都或多或少有些&qu ...
- SequoiaDB 系列之二 :SequoiaDB的简单CRUD操作
上一篇通过一系列的操作,终于把SequoiaDB的集群部署到单台机器上了. 建议去安装体验一下吧. 在整个环境的部署的体验来看,并没有MongoDB的部署简单,但是比MongoDB的部署要清晰.Mon ...
- [转]git图解(3):分支操作
本文转自:https://www.jianshu.com/p/342a9f8db004 title_img.png git 的分支是它最明显的特性, 大部分人听别人推荐使用git都会听到“git分 ...
随机推荐
- Python中内置函数的介绍
内置函数的功能介绍 常用内置函数如下: 1.abs() 绝对值 格式:abs(x) 例如:print(abs(-18)) >>> 18 返回值:number #该函数主要用于数值类的 ...
- Vue2学习(1)
学习Vue2的computed 属性和 watcher 主要将computed 和methods和watcher作比较,对其各自的相关优缺点作了介绍. computed 属性会基于它所依赖的数据进行缓 ...
- gulp填坑记(一)
gulp是基于Node.js的自动任务运行器.可以自动完成html.image.css和js等文件的检测.检查.合并.压缩.格式化等,并监听文件在改动后重复指定的这些步骤. 一.首先,我全局安装了gu ...
- UML总结4---UML九种图关系说明
转自:http://blog.csdn.NET/chenyujing1234/article/details/8173519 UML中包括九种图:用例图.类图.对象图.状态图.时序图.协作图.活动图. ...
- spring web项目下,判断项目是否启动完成
本文同时发布于见鬼网:https://faceghost.com/article/483341 概述:spring 加载完成后,我们有时候会做一些初始化工作,如加载一些缓存,DB,等,这里采用实现Se ...
- List Set Map比较
List按对象进入的顺序保存对象,不做排序或编辑操作. Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序–否则应该使用List). Map同 ...
- 在java中如何使用etcd的v2 和v3 api获取配置,并且对配置的变化进行监控
etcd 和zookeeper 很像,都可以用来做配置管理.并且etcd可以在目前流行的Kubernetes中使用. 但是etcd 提供了v2版本合v3的版本的两种api.我们现在分别来介绍一下这两个 ...
- .NET中的各种池
在.NET中,常用到的池有四个:字符串拘留池.线程池 .应用程序池.数据库连接池. 字符串拘留池 在.NET中字符串是不可变对象,修改字符串变量的值会产生新的对象.为降低性能消耗及减小程序集大小,.N ...
- grpc的服务注册与发现及负载
参考文章: (1)https://segmentfault.com/a/1190000008672912 (2)https://grpc.io/docs/ (3)https://github.com/ ...
- Go 语言循环语句
在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句. 以下为大多编程语言循环程序的流程图: Go 语言提供了以下几种类型循环处理语句: 循环类型 描述 for 循环 重复执 ...