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]第三讲:简单分支操作的更多相关文章

  1. GitHub学习心得之 分支操作

    目录 前言 1. 一般的push和pull 2. 分支操作 前言 本文对Github的分支操作进行了总结, 主要基于以下文章: http://blog.csdn.net/guang11cheng/ar ...

  2. 05.GitHub实战系列~5.发布版本之分支操作+Tag讲解 2015-12-14

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...

  3. github 的分支操作

    首先需要当前目录设置为仓库目录 一.创建本地分支 1.查看有哪些分支:git branch 2.创建一个分支:git branch name  ,其中name是分支名 3.切换到分支:git chec ...

  4. 从0开始学习 GITHUB 系列之「GITHUB 常见的几种操作」【转】

    本文转载自:http://stormzhang.com/github/2016/09/21/learn-github-from-zero8/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...

  5. 从0开始学习 GitHub 系列之「07.GitHub 常见的几种操作」

    之前写了一个 GitHub 系列,反响很不错,突然发现竟然还落下点东西没写,前段时间 GitHub 也改版了,借此机会补充下. 我们都说开源社区最大的魅力是人人多可以参与进去,发挥众人的力量,让一个项 ...

  6. github新建Repositories后具体操作步骤

    添加用户信息 第一个要配置的是你个人的用户名称和电子邮件地址.这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录: 1 2 git c ...

  7. 利用github pages创建简单的网站

    github.com 作为最流行的源代码管理工具已经风靡全球,同时在依托于github也衍生出了各种各样的应用,比如可以利用github搭建博客系统等等. 先换个话题,我们每人手头都或多或少有些&qu ...

  8. SequoiaDB 系列之二 :SequoiaDB的简单CRUD操作

    上一篇通过一系列的操作,终于把SequoiaDB的集群部署到单台机器上了. 建议去安装体验一下吧. 在整个环境的部署的体验来看,并没有MongoDB的部署简单,但是比MongoDB的部署要清晰.Mon ...

  9. [转]git图解(3):分支操作

    本文转自:https://www.jianshu.com/p/342a9f8db004   title_img.png git 的分支是它最明显的特性, 大部分人听别人推荐使用git都会听到“git分 ...

随机推荐

  1. Python中模块之hashlib&hmac的讲解

    hashlib & hmac的讲解 两个模块主要用于加密相关的操作. 1. hashlib模块 md5 具体代码如下 import hashlib ha_m5 = hashlib.md5()# ...

  2. c语言的第四次作业

    (一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"These sides do ...

  3. Java 反射 Method threw 'java.lang.InstantiationException' exception.

    查看这个InstantiationException:异常的api所说的是: 当应用程序试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该 ...

  4. 【精解】EOS智能合约演练

    EOS,智能合约,abi,wasm,cleos,eosiocpp,开发调试,钱包,账户,签名权限 热身 本文旨在针对EOS智能合约进行一个完整的实操演练,过程中深入熟悉掌握整个EOS智能合约的流程,过 ...

  5. 索引法则--少用OR,它在连接时会索引失效

    Mysql 系列文章主页 =============== 1 准备数据 1.1 建表 DROP TABLE IF EXISTS staff; CREATE TABLE IF NOT EXISTS st ...

  6. spring的 @Scheduled的cron表达式

    网上太多说的多,但却没什么用的文章了 序号 说明 是否必填 允许填写的值         允许的通配符1       秒    是                0-59 ,             ...

  7. Java关键字---this的由来和其三大作用

    [声明]欢迎转载,但请保留文章原始出处→_→ 秦学苦练:http://www.cnblogs.com/Qinstudy/ 文章来源:http://www.cnblogs.com/Qinstudy/p/ ...

  8. 解决ASP.NET MVC 检测到有潜在危险的 Request.Form 值

    提交使用html编辑器编辑后的数据,由于Request时出现有HTML或JavaScript等字符串时,系统会认为是危险性值.立马报错. "从客户端 ... 中检测到有潜在危险的 Reque ...

  9. ZooKeeper之(六)应用实例

    6.1 Java API 客户端要连接 Zookeeper服务器可以通过创建 org.apache.zookeeper.ZooKeeper 的一个实例对象,然后调用这个类提供的接口来和服务器交互. Z ...

  10. Linux Shell编程参考大全

    本文记录Linux Shell编程中常用基本知识,方便快速入门以及查询使用. 本文主要分为以下几个部分: 一.Shell中的变量 任何编程语言中,有关变量的定义,作用范围,赋值等都是最最基础的知识. ...