Git 代码分支管理 / 版本管理
Git 代码分支管理 / 版本管理
在使用 Git 时,基本不可能只有一个分支。
即使只有一个人发开,也会考虑代码的安全而分多个分支。多人协同开发时,可能每个人在不同的分支开发,也可能不同团队在不同的分支开发,还有就是不同的功能在不同的分支开发。
划分分支的方式根据不同的企业和项目而不同,以需求为导向。
一、git 分支管理
1. 状态描述
本文中,在 Github 上托管了项目 GitProject 的代码,在本地 Windows 中创建了本地代码仓库 ~/Desktop/git_project/GitProject 。当前只有一个分支 master ,提交了3次代码,项目中只有一个 git.py 文件。
2. 创建本地分支
一开始,本地只有一个分支 master 。
这时候切到其他分支,会报错,因为分支根本不存在。使用 git branch release 创建一个名字叫 release 的分支,然后使用 git branch 查看,当前新增了一个分支,但是还处于 mster 分支上(绿色)。
使用 git checkout release 切换到 release 上,再使用 git branch 查看,当前已经处于 release 分支上了。
使用 git checkout -b dev1 创建并切换到 dev1 分支上,相当于 git branch dev1 和 git checkout dev1 两条命令。
# 查看当前分支
git branch
# 查看所有分支,包括远程分支
git branch -a
# 切换分支
git checkout release
# 创建并切换分支
git checkout -b dev1
3. 创建远程分支
在本地仓库创建分支后,到远程仓库查看,本地分支还没有同步到远程仓库,因为没有用新创建的分支提交过代码。
在 Github 上点击 Branch 按钮,然后输入要创建的分支名,如 bugfix ,然后点击 Create branch bugfix 按钮创建分支。
创建之后,页面会自动刷新,刷新后,可以看到当前处于新创建的 bugfix 分支上,现在分支数已经变成两个了。
再回到本地,本地看不到在 Github 上新建的分支,使用 git fetch origin 可以获取远程的代码或分支的更新。
执行命令后,重新使用 git branch -a ,可以查看到远程新创建的分支。
4.代码合并
现在在dev1上开发代码,然后提交到远程仓库。
当使用本地分支提交代码后,本地分支会同步到远程仓库。在之前没有使用过dev1分支提交过代码,在远程仓库上没有dev1,现在远程库上可以看到dev1分支,并且有4次提交。
现在选择到master分支,看到master分支的代码还是3次提交,刚才在dev1分支提交的代码不会影响到master分支,是独立的。
现在,比如说在dev1开发一个功能,这个功能在dev1上验证通过了,要合入master,可以使用 git merge 来实现。
# 切换到主分支
git checkout master
# 合并dev1到master
git merge dev1
合并dev1的代码到master后,代码处于仓库区待 push 状态,可以看到,当前本地仓库领先远程代码仓库一次提交,使用 git push origin master 将代码提交到远程仓库。
提交代码后,远程仓库中的master分支也变成了4次提交,代码合并成功。
在合并代码的时候,(或多人在同一个分支上开发),很容易出现代码冲突。
当出现代码冲突,会有很多情况,保留一方的代码放弃另一方的代码,或双方都可以保留,或双方都需要修改,这个过程要找相关的人来一起讨论方案,找能决策的人来决定。
以上就是常见的分支管理操作了。
二、git 版本管理
在使用 git 提交代码时,每次 commit 都会生成唯一的版本号,回退版本,创建分支等操作都可以使用到具体的版本号,来按需找到对应的代码状态。
但是,commit 生成的版本号是一个 hash 值,对于程序员来说,不可能去记忆 hash 值版本号。
当项目开发到了阶段性时刻,这个阶段是项目的一个里程碑,这次提交的代码版本是比较特殊的,需要经常使用这个版本,不可能每次都去找 hash 值的版本号。
git 可以通过 git tag 来给项目打标签,定义版本号,更方便的进行版本管理。
# 给项目打标签,git tag -a 标签名 -m "信息"
git tag -a V0.1.0 -m "GitProject Version 0.1.0"
# 将标签提交到远程仓库,git push origin 标签名
git push origin V0.1.0
现在,给 GitProject 这个项目打第一个标签 V0.1.0,相当于生成第一个版本号。这个版本号的命名规则可以自定义,根据自己的项目来定义。
将标签 git push 将标签推到远程仓库后,可以在远程仓库看到对应的版本号。
通常,版本号的命名可以参考如下方式:
1.分成三段,中间用点分开,第一段是主版本号,第二段是子版本号,第三段是阶段版本号。阶段版本号更新一般是修复故障时,子版本号更新一般是向下兼容的接口变更时,主版本号更新一般是不兼容的接口变更时。不过,不是必须这样,在实际的项目中,可以灵活自由一点,最开始一般是V0.0.0或V1.0.0。
2.当正常开发有阶段性进展,需要做里程碑标记时,可以在子版本号处加1,加1后,后面的阶段版本号归0,如从V0.0.0变成V0.1.0 。
3.当版本里面有故障等需要修复时,修复后可以在阶段版本号处加1,如从V0.1.0变成V0.1.1 。
4.当有新功能上线时,可以在子版本号处加1,加1后,后面的阶段版本号归0,如从V0.1.1变成V0.2.0 。
5.当项目积累了非常多的修改和新功能,已经发生了很大的变更了,需要升主版本号,则主版本号加1,加1后,后面的子版本号和阶段版本号都归0。如在V0开发了很久,已经到了 V0.15.7,现在版本要升到V1,就是V0.15.7变成V1.0.0 。
如果打的标签不需要保留,可以删除标签。
# 删除本地标签
git tag -d 标签名
# 删除远程标签
git push origin --delete tag 标签名
这样,可以很方便的对项目进行版本管理了。
Git 代码分支管理 / 版本管理相关推荐
- linux下git分支管理,git远程分支管理
git远程分支管理 使用分支的原则 master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上 创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并 ...
- Git远程分支管理(四)
本系列为个人学习Git参照廖雪峰老师的笔记 本文内容:Git远程分支管理 参考笔记: https://www.liaoxuefeng.com/wiki/896043488029600 文章目录 3 G ...
- Git实战(五)| 让工作更高效,Git的分支管理
上一篇讲到Git的分支管理实操,在线合并和本地合并都进行了实操.毕竟:光说不练是假把式.而只练不整理,只能是傻把式了.分支管理到底如何进行管理呢? 先以GitLab上的一张经典的图打头,作为一个总体概 ...
- git的分支管理(详细版)
git的分支管理 git所有分支之间彼此互不干扰,各自完成各自的工作和内容.可以在分支使用完后合并到总分支(原分支) 上,安全.便捷.不影响其他分支工作 查看当前工作在那个分支 git branch ...
- svn合并分支到主干_谈谈代码分支管理
前言 从2019年上半年云音乐的客户端团队开始迁移到双周迭代后,随之而来的是我们需要重新调整代码分支的管理方法,来应对开发流程的变更. 双周迭代顾名思义一周开发一周测试,目的就是为了快速交付.纵观整个 ...
- 实际项目中如何使用Git做分支管理
[版权申明] 非商业目的注明出处可自由转载 出自:shusheng007 相关文章 Git日常开发常用命令汇总 文章目录 前言 概述 Git的基本使用方法 使用Git管理项目的方式 主分支 支持分支 ...
- 139.00.005 Git学习-分支管理
@(139 - Environment Settings | 环境配置) 一.Why? 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交, ...
- Git 之四 分支管理
写在前面 Git 的官网上有很详细的使用教程(当然有翻译版本),具体地址是 https://git-scm.com/book/zh/v2.唯一不足就是,很多讲解并没有实机演示.但是,毫无疑问,官网 ...
- Git Flow分支管理
1.Sourcetree简介及安装 一个用于Windows和Mac的免费Git客户端.Sourcetree简化了如何与Git存储库进行交互,这样您就可以集中精力编写代码.通过Sourcetree的简单 ...
最新文章
- tomcat 远程管理(入门级)
- QTreeWidget
- java定时器结合springboot_SpringBoot开发案例之整合定时任务(Scheduled)
- 深度解析K-L变换 及其 在特征识别中的应用
- 密码学专题 OpenSSL专题
- java多线程的底层实现_多线程的底层实现机制 - 欢迎来到古怪匹诺曹的开发世界 - OSCHINA - 中文开源技术交流社区...
- 7006.vue电商实战项目2-登录退出功能
- python中的第三方库 cv2_cv2 python
- 阿里云 wdcp面板后台控制安装
- 5.1 百度寻人 ios解析 和 天气预报解析
- python学习笔记9:面向对象编程,类
- mysql的体系架构和存储引擎
- vba 定义数组_excel自定义排序的三种方法
- WebStorm中常用的快捷键及使用技巧
- 【路径规划】基于matlab蚁群算法求解公交车路径规划问题【含Matlab源码 930期】
- 区块链分叉带来的安全挑战
- 我的世界java版刷雪球机,我的世界怎么无限得到雪球 刷雪球机介绍
- 饮食干预减轻癌症治疗相关症状和毒性
- 浅析计算机网络技术相关论文,计算机网络技术浅析论文 - 经典论文
- web安全之信息刺探防范(下)