目录
一、分支管理
?分支? ? ?dev/test/pre/pro(即master)
1. 分支在实际中有什么用呢?
2. 四个环境以及各自的功能特点
?3. 分支策略
? ?在实际开发中,我们应该按照几个基本原则进行分支管理:
4. 分支相关命令(牢记)
? ?1.查看分支
? ?2.创建分支
? ?3.切换分支
? ?4.创建+切换分支
? ?5.合并某分支到当前分支
? ?6.删除分支(分本地和远程)
? ?7.重命名本地分支,并提交到远程
演示环节:?
二、tag标签管理
?标签
Git如何给branch打tag?
标签tag命令
? ?1.查看所有标签
? ?2.创建tag
? ?3.删除tag
分支与标签的关系
一、分支管理
?分支 ? ? ?dev/test/pre/pro(即master)
1. 分支在实际中有什么用呢?
? ?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
? ?怎么办? ? ?现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作, ? ?而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作
2. 四个环境以及各自的功能特点
? ?四个环境分别是:dev、test、pre、pro(master),
? ?中文名字:开发环境、测试环境、灰度环境、生产环境
? ?dev环境:开发环境,外部用户无法访问,开发人员使用,版本变动很大。 ? ?test环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定 ? ?pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样。 ? ?pro(master)环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境。
? 3. 分支策略
? ?在实际开发中,我们应该按照几个基本原则进行分支管理:
? ?1.首先,pro分支(即master)应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
? ?2.那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时, ? ? ?再把dev分支合并到master上,在master分支发布1.0版本
? ?3.修复bug时,我们会通过创建新的bug分支(即test)进行修复,然后合并,最后删除;
? ?4.当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场 ? ?
学习时,先暂不考虑远程问题,本地搞懂了,再考虑远程问题
4. 分支相关命令(牢记)
? ?1.查看分支
此命令会列出所有分支,当前分支前面会标一个*号
? ? ?git branch ? ? ? ? ? //查看本地分支 ? ? ?git branch -a ? ? ? ?//查看远程分支
? ?2.创建分支
? ? ?git branch name ? ? ?//仅仅保存本地,远程还需要push ? ? ?git push <远程仓库名> <远程分支名>
? ? ? ? ?3.切换分支
? ? ?git checkout name
? ?4.创建+切换分支
? ? ?git checkout -b name
? ?5.合并某分支到当前分支
? ? ?git merge name
? ? ?注意:当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。 ? ? ? ? ? ?使用用git log --graph命令可以看到分支合并图。
? ?6.删除分支(分本地和远程)
? ? ?git branch ? ? ? ? ? ? ? ? ? ? ?//查看本地分支 ? ? ?git branch -d name ? ? ? ? ? ? ?//删除本地分支
? ? ?git branch -a ? ? ? ? ? ? ? ? ?//查看远程分支 ? ? ?git push origin --delete dev ? //删除远程分支
? ?7.重命名本地分支,并提交到远程
? ? ?1.重命名? ? ? ? ?git branch -m oldBranchName newBranchName ? ? ?2.删除远程分支 ? ? ? ?git push origin :oldBranchName ? ? ?3.将重命名过的分支提交 ? ? ? ?git push origin newBranchName
? ? ?1.git branch -m 要改的本地分支名 修改后的分支名(修改本地分支)
? ? ?2.git push origin :远程修改前的分支名(删除远程分支)
? ? ?3.git push origin 修改后的分支名:修改后的分支名(push 到远程分支)
? ? ?4.git branch --set-upstream 修改后的分支名 origin/修改后的分支名(绑定远程分支)
? ? ?5. git操作之pull拉取远程指定分支以及push推送到远程指定分支
? ?(1)pull操作 ? ? ?1.将远程指定分支 拉取到 本地指定分支上 ? ? ? ?git pull <远程仓库名> <远程分支名>:<本地分支名>
? ? ?2.将远程指定分支 拉取到 本地当前分支上: ? ? ? ?git pull <远程仓库名> <远程分支名>
? ? ?3.将与本地当前分支同名的远程分支 拉取到 本地当前分支上 ? ? ? ?git pull <远程仓库名>
? ? ?在克隆远程项目的时候,本地分支会自动与远程分支建立追踪关系,可以使用默认的origin来替代远程仓库名, ? ? ?所以,我常用的命令就是 git pull origin <远程仓库名>,操作简单,安全可控。
?(2)push操作 ? ? ?1.将本地当前分支 推送到 远程指定分支上(注意:pull是远程在前本地在后,push相反) ? ? ? ?git push <远程仓库名> <本地分支名>:<远程分支名>
? ? ?2.将本地当前分支 推送到 远程指定分支上 ? ? ? ?git push <远程仓库名> <远程分支名>
? ? ?3.将本地当前分支 推送到 与本地当前分支同名的远程分支上 ? ? ? ?git push <远程仓库名>
? ? ?推荐使用第2种方式,git push origin <远程分支名>
演示环节:?
新创一个项目280-j:
![e2e8d5469d854eae813194b29b93e005.png](https://img-blog.csdnimg.cn/e2e8d5469d854eae813194b29b93e005.png)
![c35402b8195548ff8d7aa4ba47a425e5.png](https://img-blog.csdnimg.cn/c35402b8195548ff8d7aa4ba47a425e5.png)
![43db86903361483493682bf55d3ae2eb.png](https://img-blog.csdnimg.cn/43db86903361483493682bf55d3ae2eb.png)
![724899447c56444ea9162ec86fd5b80b.png](https://img-blog.csdnimg.cn/724899447c56444ea9162ec86fd5b80b.png)
?![](https://img-blog.csdnimg.cn/b5ce5386b12649a8ac56a08e7528f022.png)
?![](https://img-blog.csdnimg.cn/17acc771fde94fe88eb32651ea9f25ba.png)
?(创建并且切换分支)
?![](https://img-blog.csdnimg.cn/ead3d97aa3a94afaabf1c4d9301332b0.png)
多了一个分支:dev
![](https://img-blog.csdnimg.cn/9feea2162a1b424fae5b91085f296e65.png)
![](https://img-blog.csdnimg.cn/d5aa638c6a2e4c16b1dba1efe5e7277b.png)
?(删除分支)
?![](https://img-blog.csdnimg.cn/b9040c53da814daaaeeecfbd6670d865.png)
(测试)
![](https://img-blog.csdnimg.cn/828f5e5f44894b99828cd428fd78e463.png)
?![](https://img-blog.csdnimg.cn/9104e36e6f204440b97e3027d98f340c.png)
![](https://img-blog.csdnimg.cn/6eddf85d78ca4e8797c10fc3d0505a75.png)
?(合并某分支到当前分支)
![](https://img-blog.csdnimg.cn/9898e588e6bb4632b39389c263385989.png)
![](https://img-blog.csdnimg.cn/893926a04d954179b78d3f1ad15328a4.png)
![](https://img-blog.csdnimg.cn/643e8e54205b48d580656da953834dc2.png)
?![](https://img-blog.csdnimg.cn/997f81cc7c18467282bfd25e707862eb.png)
?![](https://img-blog.csdnimg.cn/b568484646d244b3b3c42a1039ce24ed.png)
二、tag标签管理
?标签
? ? ?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_r,这都是可以的
Git如何给branch打tag?
? ?发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。 ? ?将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
标签tag命令
? ?1.查看所有标签
? ? ?git tag
? ? ?注:标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息
? ?2.创建tag
? ? ?(1)首先,切换到需要打标签的分支上,例如:dev,再创建标签
? ? ? ?git branch ? ? ? ?git checkout dev ? ? ? ?git tag 1.0.0-alpha
![](https://img-blog.csdnimg.cn/d06524d171d84530a6742f683f294021.png)
? ? ?(2)推送标签到远程
? ? ? ?git push origin 1.0.0-alpha
![](https://img-blog.csdnimg.cn/fb833c2af8df415ab30e0f025b65423a.png)
![](https://img-blog.csdnimg.cn/aaa1babb6145467984486f9b045766f4.png)
![](https://img-blog.csdnimg.cn/1625ffe9cd494b7b94f96e9c0d0101a3.png) ?
? ? ?注:因为创建的标签都只存储在本地,不会自动推送到远程,还需要手动推送
? ? ?(3)git标签分为两种类型:轻量标签和附注标签,区别:附注标签带注解
? ? ? ?git tag 1.0.0-alpha ? ? ? ? ? ? ? ? ? ? ? ? //创建轻量标签 ? ? ? ?git tag -a 1.0.0-alpha -m "一期开发完成" ? ?//创建附注标签
? ? ? ?一般推荐打带附注信息的标签,这样可以最大限度查看标签版本的修改情况
![](https://img-blog.csdnimg.cn/0180c2472ba74ca3ab5874c384b17d72.png)
?![](https://img-blog.csdnimg.cn/c39918f055db4722acf56ff225dd7024.png)
?
?![](https://img-blog.csdnimg.cn/bb0796b6afe5470f8f8e8f439c049f42.png)
?
?????????????????????![](https://img-blog.csdnimg.cn/2f3c402b67d64fcea8df52fd838e1fb3.png)
?
?
?![](https://img-blog.csdnimg.cn/eebc47dff3e445df909768f45ca596ee.png)
?
![](https://img-blog.csdnimg.cn/8997d95845184c508e4694cac9ea043f.png)
?生产环境的版本(客户常用):![](https://img-blog.csdnimg.cn/2dc3326e8e174d0ca8cb2e1e8eb2ac24.png)
?
? ?3.删除tag
? ? ?(1)删除本地tag ? ? ? ?git tag -d 1.0.0-alpha ? ? ? ?注:因为创建的标签都只存储在本地,不会自动推送到远程。所以,标签可以在本地直接删除
????????![](https://img-blog.csdnimg.cn/34b18ebfc3f040eb8fc991107442ac97.png)
?
? ? (2)删除远程tag ? ? ? ?①如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除 ? ? ? ? ?git tag -d 1.0.0-alpha ? ? ? ?②然后,再从远程删除。删除命令也是push,但是格式如下: ? ? ? ? ?git push origin :refs/tags/1.0.0-alpha
![](https://img-blog.csdnimg.cn/f4127f8050aa408eb76fb6017f64a47d.png)
?
?
分支与标签的关系
? ? ?dev-->alpha ? ? ?test-->beta ? ? ?pre-->rc ? ? ?pro-->r
今日内容分享到此结束,感谢收看!
|