Git系列五之分支管理
1.Git分支管理
分支即是平行空间,假设你在为某个手机系统研发拍照功能,代码已经完成了80%,但如果将这不完整的代码直接提交到git仓库中,又有可能影响到其他人的工作,此时我们便可以在该软件的项目之上创建一个名叫“拍照功能”的分支,这种分支只会属于你自己,而其他人看不到,等代码编写完成后再与原来的项目主分支合并下即可,这样即能保证代码不丢失,又不影响其他人的工作。
说明: Git团队合作流程图
一般在实际的项目开发中,我们要尽量保证master分支是非常稳定的,仅用于发布新版本,平时不要随便直接修改里面的数据文件,而工作的时候则可以新建不同的工作分支,等到工作完成后在合并到master分支上面,所以团队的合作分支看起来会像上面图那样。
说明: Git分支示意图
生产代码提交方式
1.1创建本地分支
首先创建本地dev分支
[root@git-node1 demo]# git branch dev[root@git-node1 demo]# git branch //查看本地分支dev* master
1.2切换本地分支
a、切换分支至刚建立dev分支
[root@git-node1 demo]# git checkout dev切换到分支 'dev'[root@git-node1 demo]# git branch* devmaster
b、切换分支发生冲突会导致无法切换对应分支,可使用-f强制切换
[root@git-node1 demo]# git checkout -f master切换到分支 'master'[root@git-node1 demo]# git branchdev* master
1.3合并本地分支
现在,我们想把linux的工作成果合并到master分支上了,则可以使用”git merge”命令来将指定的的分支与当前分支合并
git合并分之示意图
a.切换到dev分支
[root@git-node1 demo]# git checkout dev切换到分支 'dev'
b.添加内容至index.html,并提交
[root@git-node1 demo]# echo "Create new branch dev" >> index.html[root@git-node1 demo]# git add index.html[root@git-node1 demo]# git commit -m "new branch dev"[dev 1bf25ef] new branch dev1 file changed, 1 insertion(+)create mode 100644 index.html
c.切回master分支,合并dev分支
[root@git-node1 demo]# git checkout master切换到分支 'master'[root@git-node1 demo]# git merge dev //master合并dev分支内容更新 9573413..ead1936Fast-forwardindex.html | 1 +1 files changed, 1 insertion(+)create mode 100644 index.html
1.4删除本地分支
合并完成dev分支后,可以放心的删除。
[root@git-node1 demo]# git branch -d dev已删除分支 dev(曾为 ead1936)。[root@git-node1 demo]# git branch* master
1.5查看远程分支
查看远程分支
[root@git-node1 demo]# git branch -a* masterremotes/origin/master
1.6解决分支冲突
但是Git并不能每次都为我们自动的合并分支,当遇到了内容冲突比较复杂的情况,则必须手工将差异内容处理点,比如这样的情况:
git分支冲突示意图
a、创建linux分支并切换到linux分支
[root@git-node1 demo]# git checkout -b linux切换到一个新分支 'linux'
b、添加1行内容,并推送到远程仓库
[root@git-node1 demo]# echo "1.branch linux" > readme.txt[root@git-node1 demo]# git add readme.txt[root@git-node1 demo]# git commit -m "touch readme.txt"[linux 4580c3b] touch readme.txt1 file changed, 1 insertion(+)create mode 100644 readme.txt[root@git-node1 demo]# git push origin linux //推送到远程仓库,创建并关联远程dev分支Counting objects: 4, done.Compressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 294 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)remote:remote: Create merge request for linux:remote: http://git-node1/root/git_demo/merge_requests/new?merge_request%5Bsource_branch%5D=linuxremote:To git@git-node1:root/git_demo.git* [new branch] linux -> linux
c、切换至master分支,添加readme.txt文件,并和linux分支相同位置,然后尝试合并
[root@git-node1 demo]# echo "1.branch master" > readme.txt[root@git-node1 demo]# git merge linux自动合并 readme.txt冲突(添加/添加):合并冲突于 readme.txt自动合并失败,修正冲突然后提交修正的结果。[root@git-node1 demo]# vim readme.txt //我们需要手动删除<<<,=======,>>>><<<<<<< HEAD1.branch master=======1.branch linux>>>>>>> linux
d、从新提交并添加至远程分支仓库
[root@git-node1 demo]# git commit -m "merge branch linux readme.txt"[master 5f3f588] merge branch linux readme.txt[root@git-node1 demo]# git push origin masterCounting objects: 7, done.Compressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 339 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)To git@git-node1:root/git_demo.git4c7a145..5f3f588 master -> master
1.7删除远程分支
a、删除如上已经被合并过的linux分支。
[root@git-node1 demo]# git push origin --delete linuxTo git@git-node1:root/git_demo.git- [deleted] linux
b、或者push推送一个空的分支到远程test分支进行删除
[root@git-node1 demo]# git push origin :testTo git@git-node1:root/git_demo.git- [deleted] dev
1.8Git分支小结
Git鼓励大量使用分支,常见分支结构
dev分支
bug分支
新功能分支
命令 git branch //列出所有本地分支命令git branch –r //列出所有远程分支命令git branch –a //列出所有本地分支和远程分支命令git branch [branch-name] //创建新分支命令git checkout –b [branch-name] //创建新分支,并且切换到该分支命令 git branch --track [branch] [remote-branch] //创建新分支,与指定的远程分支建立追踪关系命令 git checkout [branch-name] //切换至指定分支命令 git branch –set-upstream [branch] [remote-branch] //本地分支与远程分支建立追踪关系命令 git merge [branch] //合并指定分支到当前分支命令 git cherry-pick [commit] //选择一个commit,合并至当前分支命令git branch –d [branch-name] //删除本地分支命令git push origin --delete [branch-name] //删除远程分支命令git branch –dr [remote/branch] //删除远程分支
Git系列五之分支管理的更多相关文章
- Git 最佳实践:分支管理
5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...
- GIT学习之路第五天 分支管理
本文参考廖雪峰老师的博客进行总结,完整学习请转廖雪峰博客 5.1创建与合并分支 首先创建dev分支,然后切换dev分支 $git checkout -b dev(包含创建并切换) 等价于<-&g ...
- git 入门教程之分支管理
背景 什么是分支?简单地说,分支就是两个相对独立的时间线,正常情况下,独立的时间线永远不会有交集,彼此不知道对方的存在,只有特定情况下,两条时间线才会相遇,因为相遇,所以相知,因为相知,所以改变! 正 ...
- git入门五(分支合并冲突和衍合)
分支合并冲突的处理 合并分支的冲突时在不同的分支中修改了同一个文件的同一部分,程序无法把两份有差异的文件合并,这时候需要人为的干预解决冲突.当前处于master 分支,当dev 分支和master ...
- git学习4:分支管理
每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,这个分支叫主分支,即master分支,HEAD指向master,master指向提交,所以,HEAD指向的就 ...
- 【Git】笔记4 分支管理1
1.创建与合并分支 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点: 每次提交,master分支都会向 ...
- Git&Github基本操作与分支管理
Git的原理涉及快照流.链表.指针等,这里不作过多叙述. 1.基本操作 git init 创建一个 Git 仓库 git clone [url] 拷贝一个 Git 仓库到本地 git add [fil ...
- Git 基础教程 之 分支管理及策略
创建一个属于自己的分支,别人看不到,你在你自己的分支上干活, 想提交就提交,直至开发完毕后,再一次性合并到原来分支上.这样,既安全,又不影响他人工作. 在实际的开发过程中,应照几个基 ...
- 【Git】六、分支管理&冲突解决
上一节讲了如何和远端的仓库协同工作,这一节介绍一下分支 ---------------------------- 提要 //创建一个分支dev $ git branch dev //切换到dev分支 ...
随机推荐
- Storm实战常见的问题
该文档为实实在在的原创文档,转载请注明: http://blog.sina.com.cn/s/blog_8c243ea30101k0k1.html 类型 详细 备注 该文档是群里几个朋友在storm实 ...
- redis之(十五)redis的集群中的哨兵角色
一:redis集群的哨兵的目的是什么?. (1)监控主redis和从redis数据库是否正常运行 (2)主redis出现故障,自动将其中一台从redis升级为主redis.将原先的主redis转变成从 ...
- hdu 1081(最大子矩阵)
To The Max Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- .net/c#常用框架/中间件简介(不定时更新)
任务调度 Quartz.NET:Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允 许开发人员根据时间间隔 ...
- 谈谈对final的理解
1.final修饰类 类不能被继承,类中的所有方法都是final的 2.final修饰方法 方法不能被覆盖,private修饰的方法隐性的添加了final 3.final修饰方法内参数 方法内的参数不 ...
- Centos7使用squid实现正向代理
正向代理:代理服务器帮助客户端(浏览器)实现互联网的访问 (1)代理服务器配置 1.安装squid yum install squid -y 2.编辑squid配置文件 #vim /etc/squid ...
- 洛谷P1392 取数 [堆]
题目传送门 取数 题目描述 在一个n行m列的数阵中,你须在每一行取一个数(共n个数),并将它们相加得到一个和.对于给定的数阵,请你输出和前k小的取数方法. 输入输出格式 输入格式: 第一行,三个数n, ...
- 洛谷P3975 跳房子 [DP,单调队列优化,二分答案]
题目传送门 跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一 ...
- 文件还原工具Foremost
文件还原工具Foremost 在数字取证中,通过对设备备份,可以获取磁盘镜像文件.通过分析镜像文件,可以获取磁盘存在的数据.但是很多重要数据往往已被删除.这个时候,就需要还原这些文件.Kali L ...