git学习4:分支管理
每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,这个分支叫主分支,即master分支,HEAD指向master,master指向提交,所以,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:分支管理的更多相关文章
- git学习笔记 ---分支管理
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...
- 四、git学习之——分支管理、解决冲突
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...
- git学习笔记 --分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的comm ...
- 五、git学习之——分支管理策略、Bug分支、feature分支、多人协作
一.分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生 ...
- git学习(7)标签管理
git学习(7)标签管理 1. 建立标签 在发布版本时候,我们通常会在版本库中打一个标签,这样就唯一确定了打标签的版本,有点像个里程碑,这里会有一个指向某个commit的指针 打标签很简单,首先切换到 ...
- python使用git进行版本控制-分支管理
1.远程克隆 最好的方式是先创建远程库,然后,从远程库克隆: 首先在github上创建一个新的仓库,名字叫gitskills 我们勾选Initialize this repository with a ...
- Git如何进行分支管理?
Git如何进行分支管理? 1.创建分支 创建分支很简单:git branch <分支名> 2.切换分支 git checkout <分支名> ...
- Git 远程仓库分支管理
目录 目录 速查表 关联远程代码仓库 克隆远程仓库 分支管理 创建分支 切换分支 合并分支 删除分支 解决冲突 速查表 指令 作用 git branch 查看分支 git branch newBran ...
- Git远程和分支管理
一.远程 Git是分布式版本控制系统,最重要的优点就是远程仓库托管代码.不用自己搭建一个服务器,在github上面注册一个账户就可免费获取远程仓库. 首先需要先在github上面 ...
- Git教程之分支管理之二
分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息.如果要强制禁用Fast forward模式,Git就会在merge时生成一个 ...
随机推荐
- java 消息机制 ActiveMQ入门实例
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 我下载的时候是 ActiveMQ 5.14.0 Release版 2.运行ActiveMQ 解压缩ap ...
- xml 读取递归算法
xml 读取递归算法:
- JAVA并发框架之Semaphore实现生产者与消费者模型
分类: Java技术 锁和信号量(Semaphore)是实现多线程同步的两种常用的手段.信号量需要初始化一个许可值,许可值可以大于0,也可以小于0,也可以等于0. 如果大于0,表示 ...
- 使用ActionBar Tab
使用ActionBar Tab(地址) 本文实现将页面分为多个选项卡,并在每一个选项卡中显示一个ListView. 创建新Layout - ActionbarTab.axml, 并向页面中添加Fram ...
- ubuntu samba 服务器设置
安装 SAMBA 组件 sudo apt-get install samba smbfs smbclient ubuntu 14.04 使用以下方式安装: ? 1 2 3 4 5 6 7 若之前有安装 ...
- redis 数据结构一 之t_string
简介 REDIS有非常丰富的数据结构 以及建立在这数据结构上的操作,在源文件中主要集中在 T_hash.c /T_list.c /T_string.c/T_zset.c 可以说读懂了这4个源文件 大 ...
- 用python+selenium抓取豆瓣电影中的正在热映前12部电影并按评分排序
抓取豆瓣电影(http://movie.douban.com/nowplaying/chengdu/)中的正在热映前12部电影,并按照评分排序,保存至txt文件 #coding=utf-8 from ...
- thinkPHP CRUD操作
数据访问 以 nation 表为例 方法一 => select() ①造模型对象 $naiton = D('Nation'); //也可以使用M()方法 ②查询所有 $a = $natio ...
- maven - 安装与配置
最近在了解maven的相关东西,在网上查了一些资料,现在简单整理一下. 一.maven 安装 1.先检查JDK ,Maven是一个java工具,所以请确保jdk环境已经正确安装在你的机器上. 2.点击 ...
- Chp10 10.7
<Java语言程序设计>P296 本章是关于对象的思考,主要是在研究面向对象的程序设计时类的设计,作业写得比较杂乱,构造方法时没有严格遵守类的流行设计风格,由于是作业,再加上比较简单,没有 ...