`
情情说
  • 浏览: 38867 次
  • 性别: 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工作流

    6. 协作工作流:在团队协作中,通常采用“功能分支工作流”,每个新功能开发都在自己的分支上进行,开发完成并通过测试后,再合并到主分支。这样可以确保主分支的稳定性。 除了上述基本操作外,Git还提供了一系列...

    Git版本控制管理 第2版.pdf.zip

    Git flow是一种常见的Git工作流模式,它定义了明确的分支策略,包括开发分支、特性分支、发布分支和热修复分支,以规范团队协作流程。 本书可能涵盖了以下关键知识点: 1. **Git基础**:安装与配置Git,创建和克隆...

    GIT版本库操作手册及管理规范.zip

    在团队协作中,制定合适的Git管理规范,如合理命名分支、定期合并主分支、避免直接在master分支上工作等,有助于提高开发效率和代码质量。对于Java开发者来说,理解并熟练运用Git是日常开发必不可少的技能。

    version control with git

    - Git Flow:一种流行的分支模型,包括主分支、开发分支、功能分支、发布分支和修复分支,规范团队协作流程。 9. Git钩子 - 钩子脚本:在特定事件(如提交、推送等)触发前运行的自定义脚本,用于自动化检查或...

    git中文文档

    - **分支**: 分支是Git中的核心概念,用于分离工作流。 - **分支的新建与合并**: 如何创建新分支、合并分支和解决合并冲突。 - **分支管理**: 如何查看、删除和重命名分支。 - **分支开发工作流**: 描述不同的团队...

    git magic 开始git吧

    - **按需工作流**:根据个人或团队的需求,选择适合的分支工作流模式。 ### 历史管理 - **错误承认与复杂情况**:面对错误,如何利用Git的历史功能追溯并纠正。 - **重写与制造历史**:探索重写历史的技术,如...

    Git基本常用命令.md

    - **灵活**:支持多种工作流程,如集中式工作流、功能分支工作流等。 - **安全性**:Git 使用 SHA-1 哈希算法来校验数据完整性,确保数据不会被篡改。 ### 三、Git常用命令 #### 基础命令 - `git init`: 初始化一...

    gitflow使用指南

    除了命令行工具外,还有一些第三方工具提供了更友好的图形用户界面来支持GitFlow工作流,如SourceTree等。这些工具通常具有更好的用户体验,能够更直观地展示分支之间的关系和操作历史。 ### 结语 通过以上介绍...

    Git-2.20.1-64-bit(安装包).rar

    1. Git基本概念: - 版本控制:Git的核心功能是跟踪文件和目录的更改,让开发者可以在不同的版本间切换。 - 仓库(Repository):存储所有文件及其历史版本的地方。 - 工作区(Working Directory):用户进行日常...

    IntelliJIDEA下使用Git.docx

    Git 分支是 Git 中的一个重要概念。 Git 分支可以帮助我们更好地管理代码的变化。常见的 Git 分支包括: 1. 主分支(Master):存放随时可供生产环境中的部署的代码 2. 开发分支(Develop):存放当前最新开发成果...

    git的详细使用教程.pdf

    2. **Git Flow**:这是一种常用的分支管理模型,定义了明确的工作流,包括master、develop、feature、release 和 hotfix 等不同类型的分支。这种方式有助于规范团队协作和版本控制。 3. **变基(Rebase)**:是一种...

    Git权威指南

    Git权威指南是面向开发者的重要参考资料,它详尽地介绍了分布式版本控制系统Git的使用方法和核心概念。Git作为当今最流行的版本控制工具,被广泛应用于软件开发、文档协作等多个领域。本指南将深入探讨Git的基本操作...

    progit.pdf--git学习教程

    “Git分支”章节深入讲解了分支的概念,分支的新建与合并,以及如何管理分支。这对于理解Git的分布式工作流非常关键,尤其是在多人协作的项目中。同时,本部分还介绍了如何处理远程分支和变基操作。 在“服务器上的...

    git版本控制器

    9. **工作流**:Git可以支持多种工作流,如GitFlow、Forking Workflow等,每种工作流都有其适用场景,可以帮助团队规范开发流程。 10. **集成工具**:为了简化Git的使用,有许多图形化界面工具,如SourceTree、Git...

    git视频教程

    - **灵活的工作流程**:支持多种工作流程,如功能分支、工作流分支等。 - **离线工作**:大部分操作都在本地进行,无需网络连接。 - **安装Git**:访问官方网站(https://git-scm.com/)下载对应操作系统的安装包,...

    0034Git规范指令大全1

    在这个“0034Git规范指令大全1”中,我们将深入探讨Git的一些基本命令和高级技巧,以便更好地理解和利用Git进行项目协作。 首先,理解Git的基本概念至关重要。工作区是你编辑和修改文件的地方,当你使用`git add`...

    progit.pdf

    **分支工作流** 描述了在团队中高效协作的策略,如Git Flow和GitHub Flow等。 ### Git服务器 **Git服务器** 部分介绍了如何在自己的服务器上设置Git仓库。包括了各种协议如SSH、HTTP等的配置方法,以及如何生成SSH...

    经典Git学习资料ProGit

    本章详细介绍了Git分支的相关概念、基本操作以及常见的分支工作流,为项目管理和协作提供了有力的支持。 #### 五、Git服务器端配置 ##### 5.1 协议 - **SSH协议**:通过SSH协议连接到Git服务器是最安全的方式之一...

    PRO GIT.pdf

    Git提供了灵活的分支管理策略,包括简单的合并、rebase操作等,以适应不同的工作流。 ### Git服务器部署 对于团队协作,通常需要在服务器上部署Git。这涉及到选择合适的网络协议(如SSH或HTTPS)、配置服务器环境...

Global site tag (gtag.js) - Google Analytics