[Git01]Pro Git 第三章 分支 读书笔记

时间:2022-10-07 08:45:07
[git]分支
 
Git 的分支模型称为“必杀技特性”,而正是因为它,将 Git 从版本控制系统家族里区分出来。
Git 有何特别之处呢?Git 的分支可谓是难以置信的轻量级,它的新建操作几乎可以在瞬间完成,并且在不同分支间切换起来也差不多一样快。
和许多其他版本控制系统不同,Git 鼓励在工作流程中频繁使用分支与合并,哪怕一天之内进行许多次都没有关系。
理解分支的概念并熟练运用后,你才会意识到为什么 Git 是一个如此强大而独特的工具,并从此真正改变你的开发方式。
 
Question1 :Git 是如何储存数据的?
Git 保存的不是文件差异或者变化量,而只是一系列文件快照。
Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。Git会使用 master 作为分支的默认名字。
在若干次提交后,你其实已经有了一个指向最后一次提交对象的 master 分支,它在每次提交的时候都会自动向前移动。
 
Question2 :Git 又是如何创建一个新的分支的呢?
##创建一个新的分支指针。
$ git branch testing
[Git01]Pro Git  第三章 分支 读书笔记
 
Question3 :Git 是如何知道你当前在哪个分支上工作的呢?
它保存着一个名为 HEAD 的特别指针。请注意它和你熟知的许多其他版本控制系统里的 HEAD 概念大不相同。在 Git 中,它是一个指向你正在工作中的本地分支的
指针。运行 git branch 命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去,所以在这个例子中,我们依然还在 master 分支里工作(参考图 3.5)。

[Git01]Pro Git  第三章 分支 读书笔记

 
要切换到其他分支,可以执行 git checkout 命令
 
$ git checkout testing
这时操作的文件就是testing branch里面的啦,可以在随意在testing 与master里面随意切换,改来改去。
然后你的结构就会分2个支:这叫分支简直太贴切啦:
[Git01]Pro Git  第三章 分支 读书笔记
 
 
由于 Git 中的分支实际上仅是一个包含所指对象校验和(40 个字符长度 SHA-1 字串)的文件,
所以创建和销毁一个分支就变得非常廉价。说白了,新建一个分支就是向一个文件写入 41 个字节(外加一个换行符)那么简单,当然也就很快了。
 
接下来看看,我们为什么应该频繁使用分支?
 
实际工作中大体也会用到这样的工作流程:
. 开发某个网站。
. 为实现某个新的需求,创建一个分支。
. 在这个分支上开展工作。
假设此时,你突然接到一个电话说有个很严重的问题需要紧急修补,那么可以按照下面的方式处理:
. 返回到原先已经发布到生产服务器上的分支。
. 为这次紧急修补建立一个新分支。
. 测试通过后,将此修补分支合并,再推送到生产服务器上。
. 切换到之前实现新需求的分支,继续工作。
中心思想就是:你可以随意在branchs上切换,所以一个branch就干一件事(修复一个bug)
各个branch之间独立开,互不影响,这样就会是非常清晰的workflow啦.
 
PS:每个新的branch都是出自当前指针指向的
 
$ git checkout -b iss53
Switched to a new branch "iss53"
##相当于:
$ git branch iss53
$ git checkout iss53
测试确定bug修复后,把它合并到 master 分支并发布到生产服务

器。用 git merge 命令来进行合并:

$ git checkout master
$ git merge hotfix
合并后的hotfix没有用了,使用
$ git branch -d hotfix
Deleted branch hotfix (3a0874c).
 
如果合并发生了冲突:
$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

Git 作了合并,但没有提交,它会停下来等你解决冲突。要看看哪些文件在合并时发生冲突,可以用 git status 查阅

 
确认所有冲突都已解决,也就是进入了缓存区,就可以用 git commit 来完成这次合并提交。提交的记录差不多是这样:
Merge branch 'iss53'
Conflicts:
index.html
#
# It looks like you may be committing a MERGE.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.
#

如果想给将来看这次合并的人一些方便,可以修改该信息,提供更多合并细节。比如你都作了哪些改动,以及这么做的原因。

有时候裁决冲突的理由并不直接或明显,有必要略加注解。
 
分支管理:
 
查看branch状态
$git branch
issue53
*master
testing
注意看 master 分支前的 * 字符:它表示当前所在的分支。也就是说,如果现在提交更新,master 分支将随着开发进度前移。若要查看各个分支最后一次 commit 信息,运行
$ git branch -v:
要从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用 --merge 和 --no-merged 选项(Git 1.5.6 以上版本)。比如 git branch -merge 查看哪些分支已被并入当前分支:
 
一般来说,列表中没有 * 的分支通常都可以用 git branch -d 来删掉。原因很简单,既然已经把它们所包含的工作整合到了其他分支,删掉也不会损失什么。
 
另外可以用 git branch --no-merged 查看尚未合并的工作:
$ git branch --no-merged
testing
我们会看到其余还未合并的分支。因为其中还包含未合并的工作,用 git branch -d 删
除该分支会导致失败:
$ git branch -d testing
error: The branch 'testing' is not an ancestor of your current HEAD.

不过,如果你坚信你要删除它,可以用大写的删除选项 -D 强制执行,例如

$ git branch -D testing

下一节:再来看基本的git 工作流程有哪几种,详细做法和优缺点 :)


 [Git01]Pro Git  第三章 分支 读书笔记
太!可!爱!了!你挪动的时候居然还转头看了看旁边有没有空地么!!
 
 
 
 
 
 
 
 
 
 
 
 
 

[Git01]Pro Git 第三章 分支 读书笔记的更多相关文章

  1. 《TCP/IP详解卷1:协议》第1章 概述-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  2. 《Effective C&plus;&plus;》第5章 实现-读书笔记

    章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...

  3. Pro Git 第一章 起步 读书笔记

    Pro Git 笔记 第1章 起步 1.文件的三种状态. 已提交:文件已经保存在本地数据库中了.(commit) 已修改:修改了某个文件,但还没有提交保存.(vim) 已暂存:已经把已修改的文件放在下 ...

  4. 《C&plus;&plus;Primer》第五版习题答案--第三章【学习笔记】

    [C++Primer]第五版[学习笔记]习题解答第三章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/10 第三章:字符串,向量和数组 ...

  5. 转:Git 求生手册 - 第三章分支工作

    from:http://newbranch.cn/zhi-zuo-fen-zhi-lai-gong-zuo-git-gh-pages-branching/ 来自:片段 实战 说了这么一大堆分支的东西. ...

  6. Java核心技术卷一基础知识-第5章-继承-读书笔记

    第5章 继承 本章内容: * 类.超类和子类 * Object:所有类的超类 * 泛型数组列表 * 对象包装器和自动装箱 * 参数数量可变的方法 * 枚举类 * 反射 * 继承设计的技巧 利用继承,人 ...

  7. 《CSS3秘籍》(第三版)-读书笔记

    第3章 选择器:明确设置哪些样式 每个样式(或者规则)由两个主要部分组成:选择器是告诉浏览器要格式化什么内容:声明块则列出浏览器用来给选择器定义样式的格式化指令. 1.标签选择器:整体控制 标签选择器 ...

  8. unix network programming&lpar;3rd&rpar;Vol&period;1 &lbrack;第2~5章&rsqb;《读书笔记系列》

    13~22章 重要 第2章 传输层: TCP/ UDP / STCP (Stream Control Transmission Protocol) TCP 可靠,有重传机制,SYN队列号 UDP 不可 ...

  9. unix network programming&lpar;3rd&rpar;Vol&period;1 &lbrack;第13~15章&rsqb;《读书笔记系列》

    第13章 守护进程和inetd 超级服务器 syslog() daemon_init() setuid() setgid() 第14章 高级IO 标准I/O函数库,支持3种缓冲 缓冲(读写存储设备(硬 ...

随机推荐

  1. MongoDB学习(四)客户端工具备份数据库

    在上一篇MongoDB学习(三)中讲解了如何在服务器端进行数据的导入导出与备份恢复,本篇介绍下如何利用客户端工具来进行远程服务器的数据备份到本地. 以客户端工具MongoVUE为例来进行讲解: 1.首 ...

  2. 关于 xcode 工程编译报错 undefined symbol &lowbar;res&lowbar;9&lowbar;init的解决办法

    将libresolv.dylib 添加到工程引用中(通过build phases中).补充:    _res_9_init定义在resolv.h中,可以参考http://www.opensource. ...

  3. String&period;indexOf&lpar;&rpar;

    int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引. int indexOf(int ch, int fromIndex) 从指定的索引开始搜索,返回在此字符串中第一次 ...

  4. The Impact of Garbage Collection on Application Performance

    As we’ve seen, the performance of the garbage collector is not determined by the number of dead obje ...

  5. IT编程培训,线上线下,孰优孰劣

    现在Java培训机构确实参差不齐,主要有在线培训和线下培训两大类: 1,虚拟和现实的区别:不论视觉,听觉,体验上在线教学都不如线下教学. 2,学费问 题:在线教学由于成本低,不受地域,教学设备限制一般 ...

  6. Java Swing客户端小项目

    记录一下两个用java swing写的客户端. 项目1: 关键词:swing  jtable 代码如下: 1.主类: package com.my.agent.client; import java. ...

  7. Git的操作理解

    1.本地和远程的关系相当于两个分支,是相互独立的. 2.本地分支属于本地仓库,一个仓库可以包含多个分支. 3.commit是为了告诉Git这次提交我改了哪些东西:       pull是将远程comm ...

  8. 2018面向对象程序设计(Java)第18周学习指导及要求

    2018面向对象程序设计(Java) 第18周学习指导及要求(2018.12.27-2018.12.30)   学习目标 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设 ...

  9. Java 8 新特性-菜鸟教程 &lpar;5&rpar; -Java 8 Stream

    Java 8 Stream Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种 ...

  10. scu 4444 Travel

    题意: 一个完全图,有n个点,其中m条边是权值为a的无向边,其它是权值为b的无向边,问从1到n的最短路. 思路: 首先判断1和n被哪种边连通. 如果是被a连通,那么就需要全部走b的边到达n,选择最小的 ...