目录
前言
上一篇文章简单的分享了Git GUI 图形化工具的使用,以及ssh 的生成配置,和在idea中使用git。
本文将要分享的内容是Git的分支,作为Git的一大特点,我们肯定要来分享一下啦。
一、分支
首先我们来谈谈Git分支在实际中的作用。
分支不是GIT的专利,早在CVS时代就有了。分支对于团队来说作用太大了。比如说一个项目现在是2.0版,1.0的版本已经交付给客户进行使用,但是在1.0的版本上有BUG,那么开发团队可能要同时进行1.0版的Bug修复和2.0版的开发,这样代码就会出现较大分歧。这时候就需要用到分支了,不同的任务组在不同的分支上开发,互相之间不会影响。再比如说,需要向项目中添加一个新功能,一般的团队都不会直接在主分支上修改,都会新建一个分支,在上面更改代码。这样做的好处就是保证主线代码的完整性和可用性,也就是说,主线上都是稳定的代码,可以直接拿来发布的。
分支的命名规范
dev/test/pre/pro(即master)
我们在做项目的时候是有不同的环境的下面分享一下几个环境及其特点:
四个环境以及各自的特点
四个环境分别是:dev、test、pre、pro(master),中文名字:开发环境、测试环境、灰度环境、生产环境
dev环境:开发环境,外部用户无法访问,开发人员使用,版本变动很大。
test环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定
pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样。
pro(master)环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境。
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
1.首先,pro分支(即master)应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;2.那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,
再把dev分支合并到master上,在master分支发布1.0版本3.修复bug时,我们会通过创建新的bug分支(即test)进行修复,然后合并,最后删除;
4.当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场
二、标签、版本
Tag格式: 主版本号.次版本号.修订号-类型标签,其中类型标签可为:alpha、beta、rc、r。
Tag示例:1.0.0-alpha、1.0.0-beta、1.0.0-rc、1.0.0-r
有的公司在版本命名时,前面加v,“-”替换成“_”,更加详细一点还可以在修订号后面添加发布日期
v1.0.0.191220_alpha,这都是可以的
分支与标签的关系
dev-->alpha
test-->beta
pre-->rc
pro-->r
三、分支相关命令及使用
在学习Git分支的时候,先不考虑远程的问题,先把在本地使用分支搞懂后再考虑远程使用分支。
1、查看分支、
git branch //查看本地分支
git branch -a //查看远程分支
此命令会列出所有分支,当前分支前面会标一个*号
2、创建分支
git branch name //仅仅保存本地,远程还需要push
git push <远程仓库名> <远程分支名>git push origin <远程分支名>
创建远程分支
3、切换分支
git checkout name
4、创建并切换分支
git checkout -b name
5、合并某分支到当前分支
git merge name
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
使用用git log --graph命令可以看到分支合并图。
我们先将分支切换到dev,新建一个文件叫666.txt ,将它添加并提交到本地仓库
可以看出,我们在dev分支新增的文件只有我们处于dev分支时才能看见
这样保证了主线代码的稳定,也不耽误我们的开发或者Bug的修复工作。
合并分支后可以看到,原本只能在dev分支看到的666.txt也可以在test分支看见
6、删除分支
git branch -d name //删除本地分支
git push origin --delete name //删除远程分支
当你处于某一分支时是不能删除该分支的,要先切换分支再删除
删除远程分支
7、重命名本地分支
git branch -m oldBranchName newBranchName
如果要将重命名的分支提交到远程需要删除原分支 ,将重命名后的分支提交到远程
远程的就不展示了
8、pull拉取远程指定分支
1.将远程指定分支 拉取到 本地指定分支上
git pull <远程仓库名> <远程分支名>:<本地分支名>2.将远程指定分支 拉取到 本地当前分支上:
git pull <远程仓库名> <远程分支名>3.将与本地当前分支同名的远程分支 拉取到 本地当前分支上
git pull <远程仓库名>
在克隆远程项目的时候,本地分支会自动与远程分支建立追踪关系,可以使用默认的origin来替代远程仓库名,
所以,我常用的命令就是 git pull origin <远程仓库名>,操作简单,安全可控。
这里我又重新在码云上新建了dev分支,同时新建了一个Goods.java文件。我们来试着拉取
在本地重新新建分支dev
拉取分支
9、push推送到远程指定分支
1.将本地当前分支 推送到 远程指定分支上(注意:pull是远程在前本地在后,push相反)
git push <远程仓库名> <本地分支名>:<远程分支名>2.将本地当前分支 推送到 远程指定分支上
git push <远程仓库名> <远程分支名>3.将本地当前分支 推送到 与本地当前分支同名的远程分支上
git push <远程仓库名>推荐使用git push origin <远程分支名>
四、Git给分支打标签
1.查看标签
git tag
标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息
因为当前没有标签所以没有展示
2.创建tag
1.首先,切换到需要打标签的分支上,例如:dev,再创建标签
git branch
git checkout dev
git tag 1.0.0-alpha
2.推送标签到远程
git push origin 1.0.0-alpha
因为创建的标签都只存储在本地,不会自动推送到远程,还需要手动推送
3.git标签分为两种类型:轻量标签和附注标签,区别:附注标签带注解
git tag 1.0.0-alpha //创建轻量标签
git tag -a 1.0.0-alpha -m "一期开发完成" //创建附注标签
3.删除tag
1.删除本地tag
git tag -d 1.0.0-alpha
因为创建的标签都只存储在本地,不会自动推送到远程。所以,标签可以在本地直接删除
2.删除远程tag
1.如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除
git tag -d 1.0.0-alpha
2.然后,再从远程删除。删除命令也是push,但是格式如下:
git push origin :refs/tags/1.0.0-alpha
五、内容补充
1、git stash 应用场景
我们有时会遇到这样的情况,正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,
但是新功能做到了一半你又不想提交,这时就可以使用git stash命令先把当前进度(工作区和暂存区)保存起来,
然后切换到另一个分支去修改bug,修改完提交后,再切回dev分支,使用git stash pop来恢复
2、场景应用“分支的新建与合并”
实际工作中你可能会用到类似的工作流。 你将经历如下步骤
1.开发某个软件
2.为实现某个新的需求,创建一个分支。
3.在这个分支上开展工作。
正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。 你将按照如下方式来处理
1.切换到你的线上分支(production branch)。
2.为这个紧急任务新建一个分支,并在其中修复它。
3.在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。
4.切换回你最初工作的分支上,继续工作。另外,不要忘记将这个BUG在当前分支中进行修复(重要~~~重要~~~重要~~~)
总结
本文简单的分享了Git的分支,以及标签、版本的命名、使用。希望对各位有所帮助。本人水平有限,如有错误还望指正,Thanks♪(・ω・)ノ