【Git教程】Git教程之分支管理
在前一篇文章中,主要针对Git本地仓库和远程仓库的基本操作命令进行了简要介绍,本文主要集中介绍Git的另一个主要的特点:分支管理和多人协作。
什么是分支管理
当一个任务需要多人协作完成时,每个人可以创建一个属于自己的分支,只有自己可以看到,每个人在自己的分支上完成修改提交等任务,最终开发完毕时,将每个人的分支合并到原来的主分支,这样可以互不影响,并且保证了安全。
创建和合并分支
在一开始,git仓库只有一个主分支(master),HEAD指向master,master指向最新的提交;当创建了一个新的分支(比如叫dev)后,增加一个类似于master的指针dev,并且更改HEAD指向dev。
这样,当在当前分支修改时,就是在移动dev指针,最后可以通过合并将分支合并到master分支。
使用命令如下:
创建分支: $ git branch <branch_name>
切换分支: $ git checkout <branch_name>
创建+切换:$ git checkout -b <branch_name>
查看当前分支: $ git branch //列出所有分支,当前分支前加*
合并某分支到当前分支: $ git merge <branch_name>
删除分支: $ git branch -d <branch_name>
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突,解决冲突以后再提交即可完成合并。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,然后再进行提交,使用git log --graph可以看到分支合并图。
分支管理策略
Git的分支功能十分强大,在团队开发中应该充分应用,合并分支时,加上--no-ff 参数就可以用普通模式合并,合并后的历史有分支,可以看出来做过合并,而fast forward看不出来曾经做过合并。
团队合作时,master分支应该相对稳定,每个人的工作在自己的分支上完成。
Bug分支和Feature分支
这两个分支主要是在软件开发中使用。
- Bug分支:当要修复软件开发中的一个Bug时,一个很好的办法是通过创建一个新的分支来进行修复,修复完成后进行合并,删除Bug分支,而如果当前手头工作还没有完成时,可以先使用命令
git stash将工作现场进行保存,然后去分支里修复bug,修复完成后,再通过git stash pop恢复工作现场。 - Feature分支: 当软件开发中临时增加一个新功能时,同样最好的办法是用一个新的分支来进行开发,完成后再合并,类似于Bug分支,如果想要丢弃一个没有被合并过的分支,可以通过命令
git branch -D <branch_name>来强行删除。
多人协作
多人协作的工作模式:
- 首先,可以试图用
git push origin <branch-name>推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull试图合并; - 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin <branch-name>推送就能成功!
注意:如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
查看远程库信息的命令:git remote -v
推送本地分支的命令:git push origin <branch_name>
创建和远程库对应分支的命令:git checkout -b branch-name origin/branch-name
Rebase
- rebase操作可以把本地未push的分叉提交历史整理成直线;
- rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
标签管理
标签相当于版本库的一个快照,或者说是版本号的一个别名,和某个commit绑定在一起。
- 创建标签: 命令
git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;命令git tag可以查看所有标签。 - 操作标签: 命令
git push origin <tagname>可以推送一个本地标签;命令git push origin --tags可以推送全部未推送过的本地标签;命令git tag -d <tagname>可以删除一个本地标签;命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
使用GitHub
- 在GitHub上,可以任意Fork开源仓库;
- 自己拥有Fork后的仓库的读写权限,可以推送pull request给官方仓库来贡献代码。
总结
本文主要针对Git使用相关的分支管理和标签管理进行了记录,实践出真知,多练习使用才是最佳途径!
参考链接
【Git教程】Git教程之分支管理的更多相关文章
- Git 学习(六)分支管理
Git 学习(六)分支管理 几乎每一种版本控制系统都支持分支.使用分支意味着你可以从开发主线上分离开来,然后不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录 ...
- git学习(5)分支管理(续)
git学习(5)分支管理(续) 1.解决冲突 冲突的产生 如我们在新建分支和原来master分支上对同一文件做了修改并提交,在合并分支的时候就会遇到冲突 比如我新建了分支myBranch,在这个分支上 ...
- Eclipse集成Git做团队开发:分支管理
在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...
- git 教程(15)--分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的comm ...
- git 教程(12)--分支管理
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...
- 学习廖雪峰的Git教程4--继续学习分支管理
查看分支 git branch -a 查看远程分支 git branch 查看本地分支 创建分支 git checkout -b branch-name 在远程创建一个属于自己的分支 删除分支 删除本 ...
- Git学习(四)——分支管理
一.创建与合并分支 1.创建分支 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点.每次提交 ,mast ...
- Git学习05 --分支管理02
1.冲突 产生冲突后,查看readme.txt 可以看到冲突内容 <<<<<<< ======= >>>>>>> ...
- Git之(四)分支管理
当我们初始化Git仓库的时候,Git会默认创建一个名为master的主分支.在实际工作中,主分支要求是一个稳定.健壮.安全的主线,一般不允许在主分支上直接进行开发,而是拉取一个新的分支,开发.测试完成 ...
- Git入门——远程仓库及分支管理
关于本地版本库的操作,请见:Git入门--本地版本库操作 本篇提到的所有命令: 小结 前面提到,Git相对于传统的SVN有着很大的优势,其中之一就在于集中式系统中,版本库只能存在于中央服务器上:而在G ...
随机推荐
- VirtualBox虚拟机下 解决centos系统无法上网的问题
首先,在VirtualBox中设置网卡连接方式:点“设置”,在弹出的界面中点“网络”,最后选择“连接方式”为“桥接网卡”或者网都可以络地址转换 这两种我试了试都可以 接下来修改一个文件就行: 1.打 ...
- 洛谷 P1903 BZOJ 2120 清橙 A1274【模板】分块/带修改莫队(数颜色)(周奕超)
试题来源 2011中国国家集训队命题答辩 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- javascript--闭包与this
理解javascript中的闭包与this http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html http: ...
- i386和x86-64区别通俗易懂版本(转)
x86架构首度出现在1978年推出的Intel 8086中央处理器,它是从Intel 8008处理器中发展而来的,而8008则是发展自Intel 4004的.Intel之后又推出了包括80186.80 ...
- mysql 服务器监控系列-黄杉 mysqldba
http://blog.csdn.net/mchdba/article/category/2220809
- ListViewItem中的图片不能动态改变的解决方法
近期遇到了一个问题,就是我的listviewitem中有个图片,点击的时候须要变成还有一种图片.结果在getView()中设置了响应.可是能够运行.就是不起作用.在网上查了非常多资料也没有解决.最后发 ...
- php简单的连接数据库
<?php $conn=@mysql_connect("localhost","root","") or die ("no& ...
- HDU 2255 奔小康赚大钱 KM算法题解
KM算法求的是完备匹配下的最大权匹配,是Hungary算法的进一步,由于Hungary算法是最大匹配的算法,不带权. 经典算法,想不出来的了,要參考别人的.然后消化吸收吧. 由于真的非常复杂的算法. ...
- UVa 10290 - {Sum+=i++} to Reach N
题目:给你一个数字问将他写成连续的数字的和的形式.有几种写法. 分析:数论. 设拆成的序列个数为k,我们分两种情况讨论: 1.拆成奇数个连续数.那么设中位数是a,则有n = k * a: 2.拆成偶数 ...
- rac环境改动spfile后遭遇ora-29250小例
原创作品.出自 "深蓝的blog" 博客.转载时请务必注明出处,否则有权追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/ar ...