每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,这个分支叫主分支,即master分支,HEAD指向mastermaster指向提交,所以,HEAD指向的就是当前分支。每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。

当我们创建新的分支dev时,git新建了一个指针叫dev,指向master相同的提交,同时把HEAD指向dev,就表示当前分支在dev上,不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变,假如我们在dev上的工作完成了,就可以把dev合并到master上。最简单的合并方法,就是直接把master指向dev的当前提交,就完成了合并。合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支

首先,创建dev分支并切换到该分支,

git checkout -b dev

解释:-b表示创建并切换,

相当于两条命令:

git branch dev

git checkout dev

可以用命令git branch查看当前分支,会列出所有分支,在当前分支前标一个*号。

此时对readme.txt做修改,然后提交

git add readme.txt

git commit -m 'branch test'

现在切换回到master分支

git checkout master

查看readme文件,发现刚才添加的内容不见了,这是因为那个提交是在dev分支上,而不再当前的master分支上。

这时把dev分支的修改合并到master上

git merge dev

用于合并指定分支到当前分支上,

合并后,再查看readme文件,添加的内容出现了。

这时就可以删除dev分支了,

git branch -d dev

删除后,查看branch

git branch

只剩下master分支了。

冲突解决:

1,创建并切换dev分支

git checkout -v dev

修改readme文件,然后添加到暂存区,再提交新的commit。

2,切换回master,

git checkout master

修改readme文件,然后添加到暂存区,再提交新的commit。

master分支和dev分支各自都分别有新的提交,这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,

 git merge dev

果然出现冲突信息,显示合并失败。

git status也可以告诉我们冲突的文件,

我们可以直接查看readme.txt的内容:

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改readme.txt后保存

然后添加到暂存区,再提交新的commit,,

合并后,用git log查看分支历史,

git log --graph --pretty=online --abbrev-commit

最后,删除dev分支:

git branch -d dev

一般分支进行合并时,git会采用Fast Forward模式,但这种模式有弊端,就是删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

创建并切换dev分支

git checkout -v dev

修改readme文件,然后添加到暂存区,再提交新的commit。

现在,我们切换回master

git checkout master

准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward

git merge --no-ff -m 'merge with no-ff' dev

合并后,我们用git log看看分支历史:

git log --graph --pretty=oneline --abbrev-commit

分支管理原则:master分支应该是非常稳定的,即仅仅用来发布新版本。平时在dev分支上进行试验,时不时分之合并即可。

假设当前在dev分支上进行工作,但是需要马上修复bug,如何处理呢?

由于dev的工作还未完成,所以不能提交,

1,使用git  stash命令,把当前的工作现场储存起来,等恢复现场之后继续工作。

git  stash

2,假设bug在master分支上,从master创建临时分支

git checkout master

git checkout -b  issue-101

3,修改bug,然后添加到暂存区,并提交

git add readme.txt

git commit -m 'fix bug 101'

4,切换到master分支,合并,删除issue-101分支。

git checkout master

git merge --no-ff -m 'merge bug fix101' issue-101

git branch -d issue-101

5,回到dev分支

git checkout dev

6,查看工作现场

git stash list

7,恢复工作线程

git stash pop

恢复的同时也把stash内容删除了

软件开发中,每添加一个功能,最好新建一个feature分支,完成后合并,最后删除该feature分支。

假如,开发代号为scan的新功能:

1,增加并切换到新分支上,

git checkout -b feature-sacan

2,开发完毕,增加到暂存区,并提交

git add scan.py

git commit -m 'develop new function'

3,切换到dev分支,

git checkout dev

4,合并和bug分支的合并类似,合并后删除。

或者因某些原因,这个分支要删除

git branch -d feature-scan

但是,git提示,这个分支没有合并,要强行删除,需要使用命令、

git branch -D featuren-scan

git学习4:分支管理的更多相关文章

  1. git学习笔记 ---分支管理

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

  2. 四、git学习之——分支管理、解决冲突

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

  3. git学习笔记 --分支管理策略

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

  4. 五、git学习之——分支管理策略、Bug分支、feature分支、多人协作

    一.分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生 ...

  5. git学习(7)标签管理

    git学习(7)标签管理 1. 建立标签 在发布版本时候,我们通常会在版本库中打一个标签,这样就唯一确定了打标签的版本,有点像个里程碑,这里会有一个指向某个commit的指针 打标签很简单,首先切换到 ...

  6. python使用git进行版本控制-分支管理

    1.远程克隆 最好的方式是先创建远程库,然后,从远程库克隆: 首先在github上创建一个新的仓库,名字叫gitskills 我们勾选Initialize this repository with a ...

  7. Git如何进行分支管理?

    Git如何进行分支管理?     1.创建分支     创建分支很简单:git branch <分支名>     2.切换分支     git checkout <分支名>   ...

  8. Git 远程仓库分支管理

    目录 目录 速查表 关联远程代码仓库 克隆远程仓库 分支管理 创建分支 切换分支 合并分支 删除分支 解决冲突 速查表 指令 作用 git branch 查看分支 git branch newBran ...

  9. Git远程和分支管理

    一.远程       Git是分布式版本控制系统,最重要的优点就是远程仓库托管代码.不用自己搭建一个服务器,在github上面注册一个账户就可免费获取远程仓库.      首先需要先在github上面 ...

  10. Git教程之分支管理之二

    分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息.如果要强制禁用Fast forward模式,Git就会在merge时生成一个 ...

随机推荐

  1. gulp(一)

    简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码 ...

  2. PHP乱码完美解决

    文章来源  http://www.lupaworld.com/forum.php?mod=viewthread&tid=148807 A.首先说下HTML中文乱码问题的解决方法. 比如有个in ...

  3. iOS Block循环引用

    在介绍block循环引用前我们先了解一下typeof. typeof是什么??? typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型. 它返回值是一个字符串,该字符串说明运算数的类 ...

  4. CSS3中:nth-child和:nth-of-type的区别深入理解。 关于:nth-child和:nth-of-type的区别之前一直没太注意,经深入理解才发现里面其实暗藏玄机

    关于:nth-child和:nth-of-type的区别之前一直没太注意.最近打算深入了解一些CSS3,才发现里面其实暗藏玄机. :nth-child可以选择父元素下的字元素,:nth-of-type ...

  5. MySQL 重装

    由于之前第一次装MySQL,默认的datadir在启动盘中,我想要将datadir移动到更大的存储盘中.无奈网上的各种文章的方法在我这里总是不work.我决定重新用homebrew来装一遍MySQL. ...

  6. java一行一行写入或读取数据

    原文:http://www.cnblogs.com/linjiqin/archive/2011/03/23/1992250.html 假如E:/phsftp/evdokey目录下有个evdokey_2 ...

  7. 小米note3,华为手机,软键盘弹出之后,页面上定位的元素布局会乱掉

    原因:可能是因为,软键盘弹出时,改变了height,使height:100%,不能达到原来的高度. 解决办法: $(document).ready(function () { $('body').he ...

  8. 【转】Web Service单元测试工具实例介绍之SoapUI

    转自:http://blog.csdn.net/oracle_microsoft/article/details/5689585 SoapUI 是当前比较简单实用的开源Web Service 测试工具 ...

  9. c语言数据结构之 插入排序

    算法:从第二个元素开始,与前一个元素进行比较,如果小于前一个元素,两者交换位置,一直循环到不再小为止 编译器:VS2013 代码 #include "stdafx.h"#inclu ...

  10. python之读取cdv

    csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存储为csv文件,文件内容是:No.,Name,Age,Score1,Apple,1 ...