简单介绍

之前说过,每次修改之后,Git 并不是保存这些修改之后的差异变化,实际上就像一个照相机一样,将修改后的文件拍下作为文件快照,记录在一个微型的文件系统中。在 Git 中提交时,会保存一个提交对象,这个对象包含一个暂存内容快照的指针。而 Git 中的分支其本质上是一个指向 commit 对象的可变的指针,使用 master 作为分支的默认名字,通常指向的是最新的一次提交。

每次的提交,Git 把他们穿起来连成一条线,而主分支master就在这条线上随着提交测更新移动,而 HEAD 指向master,表示我们当前处在 master 分支上(不好意思,直接就用廖雪峰老师的图了,他的教程请戳这里

创建一个叫做 dev 分支,这个分支默认会只想当前你所处在的提交对象上,切换到这个分支上后,HEAD 便指向了 dev。

从这个时候开始,对工作区的操作都只是在 dev 分支上发生了,在 dev 的上提交一次之后,master 指向原来的那个提交对象,而 dev 会指向最新的提交对象。我们称:master 落后了 dev 一个 commit。当我们试图将 master 指向 dev 当前的提交时,这个操作就是合并分支。

在上述的这几个过程中,工作区的内容没有变化,整个过程就是修改几个指针而已,几乎就是瞬间完成。

创建与合并

创建一个 crisp 分支,然后切换到这个分支:

git checkout -b crisp
Switched to a new branch 'crisp'

git checkout -b 表示创建并切换分支,相当于将下面两步操作合并成一步来做

git branch crisp 		// 创建分支
git checkout crisp // 切换到指定的分支

同时,可以用 git branch 查看分支,这个命令会列出所有的分支,在当前的分支前面会表上一个 * 号。

分支与分支之间相互独立,彼此绝缘,所以可以在 主分支master的基础上分出若干个分支,进行不同的操作,比如不同模块的开发,bug的修复等,工作完成之后合并到主分支就行了。怎么合并分支呢?

假设我们正在 dev 分之上开发,当开发完成后,在这个分之上提交代码

git add .
git commit -m "dev 开发完成!"

此时的提交是在 dev 分支上的提交,当你切回 master 上是,dev 上的修改你都看不到。此时的 master 如果没有人提交过的话,则停留在切换分支之前的那个提交点上,也就是落后与 dev 分支。这个时候我们就需要将分支合并了。

git checkout master		// 先切回 master 分支
git merge dev // 手动将dev 分支上的提交合并到 master 上

当某一个分支不在需要的时候,可以将它删除

git branch -d branchname

小小的总结一下:

查看分支:git branch

创建分支:git branch name

切换分支:git checkout name

创建+切换分支:git checkout -b name

合并某分支到当前分支:git merge name

删除分支:git branch -d name

git 使用笔记(三)-分支的使用的更多相关文章

  1. Git知识总览(三) 分支的创建、删除、切换、合并以及冲突解决

    前两篇博客集中的聊了git的一些常用命令,具体请参见<Git知识总览(一) 从 git clone 和 git status 谈起>.<Git知识总览(二) git常用命令概览> ...

  2. 【Git】笔记4 分支管理1

    1.创建与合并分支 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点: 每次提交,master分支都会向 ...

  3. git 学习笔记 --Bug分支

    软件开发中,bug就像家常便饭一样.有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除. 当你接到一个修复一 ...

  4. git使用笔记-比较分支差异

    比如我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式: 1.查看 dev 有,而 master 中没有的: git log dev ^master 同 ...

  5. 【Git】笔记5 分支管理2

    来源:廖雪峰 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一 ...

  6. git学习笔记09-bug分支-自己的分支改到一半了-要去改bug怎么办?

    当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交: 并不是你不想提交,而是工作只进行到一半,还没法 ...

  7. Git学习笔记(三)

    Git提交相关内容 在Git提交时,会保存一个提交对象,该对象包括一个指向暂存区内容快照的指针,包括本次提交作者等相关附属信息,包括零个或多个指向该提交对象的父对象指针:首次提交时是没有祖先,普通提交 ...

  8. Git学习笔记五--分支管理

    为什么要引入分支? 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部 ...

  9. git学习笔记三

    1.每个分支的历史版本维护信息位置是.git/logs/refs/heads/master,这个位置的信息是文本文件,不是引用. harvey@harvey-Virtual-Machine:~/dem ...

随机推荐

  1. 收藏的技术文章链接(ubuntu,python,android等)

    我的收藏 他山之石,可以攻玉 转载请注明出处:https://ahangchen.gitbooks.io/windy-afternoon/content/ 开发过程中收藏在Chrome书签栏里的技术文 ...

  2. 转: ES6异步编程: co函数库的含义与用法

    转: ES6异步编程: co函数库的含义与用法 co 函数库是著名程序员 TJ Holowaychuk 于2013年6月发布的一个小工具,用于 Generator 函数的自动执行. 比如,有一个 Ge ...

  3. (13)[Xamarin.Android] 不同分辨率下的图片使用概论

    原文 [Xamarin.Android] 不同分辨率下的图片使用概论 设计Android App的时候,其尺寸众多也是一个挑战之一.要针对不同尺寸设计Android App时,就要先来了一下dpi(d ...

  4. UI_拖动View

    方法一 在touchesMoved中 // 获取到触摸的手指 UITouch *touch = [touches anyObject]; // 获取集合中对象 // 获取開始时的触摸点 CGPoint ...

  5. C++ ofstream和ifstream

    ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O, ...

  6. telnet测试端口号

    telnet Ip 端口号 如:telnet localhost 1433 详见此链接(转) http://www.3lian.com/edu/2012/11-08/43232.html

  7. asp.net textbox keyup事件触发后台的textchange事件

    textbox文本框text_change事件,失去焦点才会执行. 通过keyup事件,js控制失去焦点. <asp:TextBox runat="server" ID=&q ...

  8. iOS 点转成字符串,再字符串转换成点

    CGPointFromString(<#NSString *string#>) NSStringFromCGPoint(<#CGPoint point#>)

  9. C#控件大小随窗体大小等比例变化

    相信很多博友在开发初次接触学习C# winForm时,当窗体大小变化时,窗体内的控件并没有随着窗体的变化而变化,最近因为一个项目工程的原因,也需要解决这个问题.通过查阅和学习,这个问题得到了解决,或许 ...

  10. Enum基础

    enum ColorE {     RED, GREEN, BLUE; } public class GetEnumContent {     public static void main(Stri ...