`
情情说
  • 浏览: 37707 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

git分支管理和工作流规范:基本概念说明

git 
阅读更多

 

接下来,会分享「git分支管理和工作流规范」相关内容,当一个项目大了后,会有多人共同协作开发,如果没有相关规范,代码合并的时候会有很多冲突,代码的版本和提交历史也会显得很乱。针对这2个问题,可以通过分支的管理、工作流规范很好的解决。

针对不同的场景创建不同的分支,始终保持主分支可靠、干净,比如新增功能、修复线上问题、修复测试环境的bug等场景,需要创建不同的分支。另外,要对下一版本要上线的功能提前规划好,把功能细分,分配给每个人去完成,功能相互依赖的在同一个分支,不确定要上线的功能要单独创建分支,这样可以减少合并时的冲突。

提交代码时,要保持提交历史的清晰,提交的注释也要规范,关于提交历史,总结了3个要点:

  • 一个git用户非常重要的技能是能够维护一个清晰的语义化的变更历史;
  • 通过查看版本变更历史就可以反映出团队的开发目的、功能变更;
  • 版本变更历史记录的是代码的发展,而不是开发者在编码时的活动;

会分3篇文章分享「git分支管理和工作流规范」:

  • git相关概念
  • 具体规范
  • 不同场景细化和演示

本篇主要介绍下git相关概念,太基础的我就不介绍了,网上资料比较多,主要包括:

  • 文件的状态
  • 分支的概念
  • merge合并
  • rebase衍合
  • git工作流程

文件的状态

状态类型
  • 已修改:修改了某个文件,但还没有提交保存;(没有add)
  • 已暂存:已修改的文件放在下次提交时要保存的清单中;(已add,没有commit)
  • 已提交:文件已经被安全地保存在本地数据库中;(已commit)
工作目录、暂存目录、git目录

3个目录与文件的状态是对应的,不同的状态放在不同的目录。

git的3个目录

git对象
  • 对象包括提交、文件树、文件内容、其他操作对象;
  • 用40位十六进制数字组成;
  • 可通过git cat-file 命令查看对象信息;
基本工作流程
  • 在工作目录中修改某些文件;
  • 对修改后的文件进行快照,然后保存到暂存区;
  • 提交更新,将保存在暂存区域的文件快照永久转储到git目录中;
状态相关命令
  • git status 显示哪些文件已修改、哪些文件已暂存、未提交;
  • git diff 比较不同状态的文件
    • 默认比较工作目录、暂存区文件快照的差异;(修改后,未暂存的文件)
    • —cached 比较已暂存、上次提交时的快照之间的差异;
  • git reset 进行撤销操作,将当前分支重设到指定的commit
    • —hard 重设工作目录和暂存区;
    • —mixed 默认方式,仅重设暂存区,工作目录不变;
    • –soft 仅仅把HEAD指向,commit之后的commit会进入暂存区;

分支的概念

本质上,分支仅仅是指向commit对象的可变指针。

git如何知道你当前在哪个分支上工作?

  • 保存着一个名为HEAD的特保指针;
  • HEAD是一个指向你正在工作中的本地分支的指针;

通过git branch -a 查看分支时,会看到所有分支,包括本地分支、远程分支;

分支的概念

分支的合并主要有2种方式,merge和rebase。merge主要是自动合并,针对不同场景有不同的合并策略,rebase主要是手动合并,可针对每次commit指定不同的合并策略,下面会分别介绍。

merge合并

  • —commit —no-commit 合并后,是否自动产生一个合并结果的commit节点;
  • —edit —no-edit 是否接受自动合并的信息;
  • —ff —no-ff选项
    • 默认情况下,git执行“快进式合并”(fast-farward merge),不会创造一个新的commit节点;
    • —no-ff,会创建一个新的commit;
  • —log —no-log
    • 合并提交时,除了分支名以外,是否还包括commit节点的日志信息
  • —squash
    • 不保留待合并分支上的历史信息,也不提交、不移动HEAD,需要一个额外的commit命令;
    • 判断是否使用—squash选项的最根本的标准是,待合并分支上的历史是否有意义;
  • — abort
    • 抛弃当前合并冲突的处理过程并尝试重建合并前的状态;

rebase衍合

$ git rebase -i [branch|]

三个操作命令:—continue、—absort 和 —skip,这三个命令的意思分别是“继续”、“退出”和“跳过”

一定要注意的地方:

  • 一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作;
    • 在进行衍合的时候,实际上抛弃了一些现存的提交对象而创造了一些类似但不同的新的提交对象;
    • 如果你把原来分支中的提交对象发布出去,并且其他人更新下载后在其基础上开展工作,而稍后你又用git rebase 抛弃这些提交对象,把新的重演后的提交对象发布出去的话,你的合作者就不得不重新合并他们的工作,这样当你再次从他们那里获取内容时,提交历史就会变得一团糟;
  • 把衍合当成一种在推送之前清理提交历史的手段,而且仅仅衍合那些尚未公开的提交对象;

具体的示例,网上资料很多,就不在此说明了。

git工作流

协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去。

网上对这一部分的介绍也很多,介绍比较多的就是git flow规范,可以参考下面2篇文章:
[1] 阮一峰:git工作流程
[2] git-flow工具

git-flow工作流

最后附上常用的命令速查表:

git常用命令速查表

欢迎扫描下方二维码,关注我的个人微信公众号 ~

 


情情说

 

 

分享到:
评论

相关推荐

    分支管理规范-GIT分支流程开发规范

    该文档定义了分支管理规范-GIT分支流程开发规范。

    git分支管理策略

    如果你严肃对待编程,就必定会使用”版本...git分支管理策略,规范公司开合作开发流程。同时针对目前对开发团队使用 Git 并没有统一的分支管理策略,所以编写该文档为后续新员工培训、代码管理、自动化发布提供标准。

    git版本管理使用规范-团队开发规范文档

    关于git项目管理分支说明。 2.1. master主干 命名:master 说明:发布分支 master为程序主干目录,开发新需求需从master打新分支,开发完成合并回master发测试包,测试完成需打新的tag包,tag包申请上线发布 2.2. ...

    GIT分支管理

    GIT分支管理 远程分支 本地分支 GIT分支管理 远程分支 本地分支

    git分支版本管理.pdf

    企业git分支管理pdf

    git分支开发规范指南.pdf

    Git 是目前最流行的源代码管理工具。为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范 git 的相关操作

    Git工作流指南:Gitflow工作流

    Gitflow工作流没有用超出功能分支工作流的概念和命令,而是为不同的分支分配一个很明确的角色,并定义分支之间如何和什么时候进行交互。除了使用功能分支,在做准备、维护和记录发布也使用各自的分支。当然你可以用...

    git分支管理规范说明资料

    分支管理规范说明资料

    git分支管理

    详细讲解git分支管理,适合于代码管理、项目管理等工作。

    Git分支和标签介绍

    介绍了Git分支和标签的原理及使用方法,Git分支内容包括Git原理、创建分支、合并分支、上传本地分支、跟踪远程分支等。Git标签内容包括查询Git标签、添加Git标签、为历史提交记录添加Git标签等。

    Git分支管理的策略梳理

    Git分支管理的策略梳理

    GIT分支代码统计

    GIT分支代码统计,安人员统计,分2步,第一步完成后可以手动修改统计的异常数据,然后执行第二部,得到更准确的统计数据。

    Git工作流指南

    描述了GIT工作流实战使用方法:集中式工作流,集中式工作流,Gitflow工作流,Forking工作流,Pull Request工作流

    git 删除分支和回滚的实例详解

    git 删除分支和回滚的实例详解 【git 删除本地分支】 git branch -D br 【git 删除远程分支】 git push origin :br (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id 【本地...

    git 分支管理

    使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间。

    Git代码管理规范.doc

    Git代码管理规范

    Git工作流指南:集中式工作流

    转到分布式版本控制系统看起来...其次,Git提供了强壮的分支和合并模型。不像SVN,Git的分支设计成可以做为一种用来在仓库之间集成代码和分享修改的『失败安全』的机制。像Subversion一样,集中式工作流以中央仓库作为

    Git flow 工作流与规范.md

    对Git flow 工作流解析与使用基本规范 Git Flow有主分支和辅助分支两类分支。其中主分支用于组织与软件开发、部署相关的活动;辅助分支组织为了解决特定的问题而进行的各种开发活动。

    07.Git分支规范1

    该分支一直存在,始终不删除develop分支上可以直接修改,可以合并其他分支基于develop分支可以创建feature分支该分支由master分支创建出来测试

Global site tag (gtag.js) - Google Analytics