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 代码分支管理 / 版本管理相关推荐

  1. linux下git分支管理,git远程分支管理

    git远程分支管理 使用分支的原则 master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上 创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并 ...

  2. Git远程分支管理(四)

    本系列为个人学习Git参照廖雪峰老师的笔记 本文内容:Git远程分支管理 参考笔记: https://www.liaoxuefeng.com/wiki/896043488029600 文章目录 3 G ...

  3. Git实战(五)| 让工作更高效,Git的分支管理

    上一篇讲到Git的分支管理实操,在线合并和本地合并都进行了实操.毕竟:光说不练是假把式.而只练不整理,只能是傻把式了.分支管理到底如何进行管理呢? 先以GitLab上的一张经典的图打头,作为一个总体概 ...

  4. git的分支管理(详细版)

    git的分支管理 git所有分支之间彼此互不干扰,各自完成各自的工作和内容.可以在分支使用完后合并到总分支(原分支) 上,安全.便捷.不影响其他分支工作 查看当前工作在那个分支 git branch ...

  5. svn合并分支到主干_谈谈代码分支管理

    前言 从2019年上半年云音乐的客户端团队开始迁移到双周迭代后,随之而来的是我们需要重新调整代码分支的管理方法,来应对开发流程的变更. 双周迭代顾名思义一周开发一周测试,目的就是为了快速交付.纵观整个 ...

  6. 实际项目中如何使用Git做分支管理

    [版权申明] 非商业目的注明出处可自由转载 出自:shusheng007 相关文章 Git日常开发常用命令汇总 文章目录 前言 概述 Git的基本使用方法 使用Git管理项目的方式 主分支 支持分支 ...

  7. 139.00.005 Git学习-分支管理

    @(139 - Environment Settings | 环境配置) 一.Why? 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交, ...

  8. Git 之四 分支管理

    写在前面   Git 的官网上有很详细的使用教程(当然有翻译版本),具体地址是 https://git-scm.com/book/zh/v2.唯一不足就是,很多讲解并没有实机演示.但是,毫无疑问,官网 ...

  9. Git Flow分支管理

    1.Sourcetree简介及安装 一个用于Windows和Mac的免费Git客户端.Sourcetree简化了如何与Git存储库进行交互,这样您就可以集中精力编写代码.通过Sourcetree的简单 ...

最新文章

  1. tomcat 远程管理(入门级)
  2. QTreeWidget
  3. java定时器结合springboot_SpringBoot开发案例之整合定时任务(Scheduled)
  4. 深度解析K-L变换 及其 在特征识别中的应用
  5. 密码学专题 OpenSSL专题
  6. java多线程的底层实现_多线程的底层实现机制 - 欢迎来到古怪匹诺曹的开发世界 - OSCHINA - 中文开源技术交流社区...
  7. 7006.vue电商实战项目2-登录退出功能
  8. python中的第三方库 cv2_cv2 python
  9. 阿里云 wdcp面板后台控制安装
  10. 5.1 百度寻人 ios解析   和     天气预报解析
  11. python学习笔记9:面向对象编程,类
  12. mysql的体系架构和存储引擎
  13. vba 定义数组_excel自定义排序的三种方法
  14. WebStorm中常用的快捷键及使用技巧
  15. 【路径规划】基于matlab蚁群算法求解公交车路径规划问题【含Matlab源码 930期】
  16. 区块链分叉带来的安全挑战
  17. 我的世界java版刷雪球机,我的世界怎么无限得到雪球 刷雪球机介绍
  18. 饮食干预减轻癌症治疗相关症状和毒性
  19. 浅析计算机网络技术相关论文,计算机网络技术浅析论文 - 经典论文
  20. web安全之信息刺探防范(下)

热门文章

  1. Tensorflow 迁移学习 识别中国军网、中国军视网Logo水印
  2. CSS魔法堂:选择器及其优先级
  3. 回顾一下Unix哲学
  4. 自定义PopupWindow 怎么设置PopupWindow的宽度充满全屏宽度
  5. 低版本wordpress运行在PHP5.4上如何关闭warning信息
  6. mac os x 10.8 安装python-mysqldb
  7. Cisco单臂路由实验
  8. Git 本地项目添加多个远程仓库
  9. C#中使用ajax请求
  10. 【C语言】创建一个函数,利用该函数将字符串中的小写字母转换为大写字母