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
转载于:https://www.cnblogs.com/Nick-M/p/4605528.html
git学习4:分支管理相关推荐
- Git 远程仓库分支管理
目录 目录 速查表 关联远程代码仓库 克隆远程仓库 分支管理 创建分支 切换分支 合并分支 删除分支 解决冲突 速查表 指令 作用 git branch 查看分支 git branch newBran ...
- python使用git进行版本控制-分支管理
1.远程克隆 最好的方式是先创建远程库,然后,从远程库克隆: 首先在github上创建一个新的仓库,名字叫gitskills 我们勾选Initialize this repository with a ...
- git版本控制以及分支管理
git版本控制以及分支管理--一起乘坐时光机 四.深度剖析 一.版本控制---时光机穿梭 1.熟悉版本 2.版本回退 3.管理修改 1.管理修改以及理解工作的原理 2.撤销修改的内容 3.删除文件 二 ...
- Django实战技巧(2)-git代码仓分支管理技巧
Django(1)-简介 Django(2)-创建项目及默认项目目录结构介绍 Django(3)-配置文件详解 Django(4)-URL和视图 Django(5)-路由配置实例 Django(6)- ...
- Git远程和分支管理
一.远程 Git是分布式版本控制系统,最重要的优点就是远程仓库托管代码.不用自己搭建一个服务器,在github上面注册一个账户就可免费获取远程仓库. 首先需要先在github上面创建仓库.创建步骤百度 ...
- Git由浅入深之分支管理
几乎所有的版本控制系统都以分支的方式进行操作,分支是独立于项目主线的一条支线,我们可以在不影响主线代码的情况下,在分支下进行工作.对于传统的一些版本控制工具来说,我们通常需要花费比较多的时间拷贝主线代 ...
- Git版本控制__分支管理
文章目录 Git基本操作 1. git 两大特点 2. 安装与配置 3. 创建一个版本库 4.版本创建与回退 4.1 使用 4.2 工作区和版本库 工作区 ( Working Directory ) ...
- Git怎样做分支管理
查看全文 http://www.taodudu.cc/news/show-3787419.html 相关文章: git分支规范 实际项目中如何使用Git做分支管理 多人开发 Git 分支管理详解 gi ...
- Git学习笔记——分支
分支用法很多,比如bug修复,协作管理,这里只简单介绍我在工作中用到的协作模式. 场景:我自己开发独立功能,在本地为自己创建一个分支就叫localbranch吧,甭管master到哪了,我只管开发我的 ...
- (GIT)代码分支管理策略
一.我们采用的管理策略(分支开发主干发布) 1. 主分支(master),用于发布,每次发布时打一个(tag),不做任何开发使用 拉取源:无 合并目标:无 修改:不允许 生命周期:持续 2. 开发分支 ...
最新文章
- 深度学习面试25问题
- 转VS2010解决方案转换到VS2008
- php打印文件目录结构,php和java关于目录树(列出某一目录下文件结构)
- Firefox扩展开发 Hello World!
- 一些常见去除恶意软件的东东
- 机房收费系统----可行性分析报告
- SMS短信通API——(1)Java应用发送手机短信
- GLIBC中NPTL线程实现代码阅读
- dj电商-模型类设计-1.x-模型类抽象基类
- 怎么把4张图片合成一张_暴露年龄的20张图片,最后一张是什么?求解
- ogg启动报错libnnz11.so: cannot open shared object file
- 如何在 Linux 中使用 AppImage
- 终极算法 机器学习和人工智能如何重塑世界
- 人工智能助力网络金融反欺诈,声纹识别受追捧
- 板卡(单片机)与电脑PING不通的原因及解决方法
- web网页qq客服功能
- 【滤波器】6. 高通滤波器
- Linux命令学习之一
- 解析聚合新闻数据,并显示到主界面上(简易新闻 二)
- 结合Elementplus源码讲解BEM的使用
热门文章
- 小编带你了解oracle使用索引和不使用索引性能分析
- 皇室战争:渔夫化身“战场搅屎棍”,见人就拉,选卡很关键
- pyecharts第八节、雷达图
- 本地连接时,通过localhost不能登陆到指定的端口
- Win7删除休眠文件
- ArcGIS 10.0 ArcGIS 9.3.1数据生成实验--个人地理数据库
- eclipse打开出错 Error: opening registry key 'Software\JavaSoft\Java Runtime Environment'
- 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档
- STL源码学习----集合相关算法
- [导入]对iis写权限的利用