首页 > 其他分享 >Git 流程优化-实践

Git 流程优化-实践

时间:2023-10-17 09:15:05浏览次数:43  
标签:git name 流程 合并 merge Git 优化 rebase 分支

  1. 用 git cz 代替 git commit 操作

  2. 全局安装
    npm install -g commitizen cz-conventional-changelog
    npm i -g cz-customizable

  3. 写入配置
    echo'{ "path": "cz-customizable" }' > ~/.czrc

  4. 在项目根目录下写入文件.cz-config.js
    module.exports = {
    // 可选类型
    types: [
    { value: 'feat', name: 'feat: 新功能' },
    { value: 'fix', name: 'fix: 修复' },
    { value: 'docs', name: 'docs: 文档变更' },
    { value: 'style', name: 'style: 代码格式(不影响代码运行的变动)' },
    { value: 'refactor', name: 'refactor: 重构(既不是增加feature,也不是修复bug)' },
    { value: 'perf', name: 'perf: 性能优化' },
    { value: 'test', name: 'test: 增加测试' },
    { value: 'chore', name: 'chore: 构建过程或辅助工具的变动' },
    { value: 'revert', name: 'revert: 回退' },
    { value: 'build', name: 'build: 打包' },
    ],
    // 消息步骤
    messages: {
    type: '请选择提交类型:',
    scope: '请选择一个scope (可选):',
    customScope: '请输入修改范围(可选):',
    subject: '请简要描述提交(必填):',
    body: '请输入详细描述,使用“|”进行换行(可选):',
    footer: '请输入要关闭的issue,或打上私有部署标签(可选):',
    confirmCommit: '确认使用以上信息提交?(y/n/e/h)',
    },
    allowCustomScopes: true,
    scopes: [
    { name: '树结构模块' },
    { name: '设计稿模块' },
    { name: '单页模块' },
    { name: '原型稿模块' },
    { name: '演示模块' },
    ],
    // 跳过问题
    skipQuestions: ['body', 'scope'],
    // subject文字长度默认是72
    subjectLimit: 72,
    };
    现在可以在命令行中使用 git cz 操作来替代git commit 了。

  5. 私有化部署如何较少冲突

  6. 优化commit-message ,使用git cz 提交commit 信息,在footer 中打上标签 #readme问题号(2023.1-p)

  7. git rebase ,在合并分之前都确保分支是经过git rebase 变基之后的提交。使分支更好路径更简洁,方便查看代码提交以及生成gitlog。以及分支合并策略 - 从最先提交开始合并。保证我们的分支如下图,形成一条笔直的直线状态。(rebase 原理在于在本地先同步远程分支,并解决了冲突了,在cherr-pick过程中就不会产生冲突)

  8. gitlab中配置 merge前进行 git rebase操作。(在配置这个前,最好的方法是尽快合并开发分支到月度版本上,尽可能避免同时几个分支需要合并的情况)
    目前先将各自的合并请求发送到小组群里。

  9. 通过git log 来检索过滤有带有私有部署的commitID。再通过 git chery-pick commitID 来将私有化部署迁移到私有化分支上
    1. 配置别名
    git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset %b' --date=format:"%Y-%m-%d %H:%M:%S""
    2. 执行 私有化部署查询 并 在私有化分支上新开一个分支 通过cherry-pick 从列表最底端开始pick操作。
    git lg --grep="2023.1-p"


git cherry-pick c72c479

最后再将新建的分支,合并到私有化部署主分支上。最后再将整个版本合并到私有化部署分支上,也不会出现冲突,大功告成
3. 整体流程如下

  1. 在自己的分支上修改代码,需要提交代码时
  2. git add .
  3. git cz (替代原来的git commit -m ,不再使用 git commit 了)
  4. 根据git cz 控制面板提示选择和填写


5. git push 将我们本地分支推送到远程
6. 在 gitlab 中进行merge 合并代码申请


  1. 如果需要 进行rebase 重新提交的,流程如下
    1. 在自己本地分支上 执行 git rebase origin/dev-2023-02
    2. 如果有冲突,先修改冲突,然后执行git add . 和 git rebase --continue
    3. 将本地分支强推到远程 git push -f (切记不可根据提示 执行 git pull )
    4. 推送远程成功后,再到gitlab上进行分支合并就不会落后taget分支提示了,可以正常合并代码

  2. 我们的目标

  3. 回顾过去的分支记录

  4. 现在稍微努力后的分支记录

  5. 第一周适应过程,大家遇见不同的问题多沟通多讨论

  6. 第二周全面严格执行,让合并分支变成一根笔直的线 (如下图lodash团队分支图)

  7. 关于思想问题

  8. 本地分支(fix分支) 合并 到主开发分支(dev-2023-02)需要 先进行rebase 这个操作,目的是为了同步远程分支,为什么不能使用merge? 那什么情况下需要使用merge,merge or rebase 如何选择?
    首先merge 和 rebase 都能达到同步分支的效果,merge 会使得我们本地分支保留我们拉分支的时间,并且会生成一个新的commit合并记录。但也会使得我们整个分支结构看起来十分混乱。如果小团队人员多起来,我们整个分支结构将变得很难管理,如遇到 需要代码回退,解决冲突问题变得十分棘手,稍不注意会出现 解决冲突代码被合并掉了 这种大问题,不利于分支以及代码的管理。并且merge 处理冲突需要手动再加一个commit ,如果后续需要进行chery-pick 还得把冲突的commit 一起搞过去。

使用rebase 能很好解决merge带来的混乱问题,让分支结构清晰明了。rebase的变基操作,让我们去除了我们拉取分支时间这个多余的信息干扰,我们本地分支合并 dev分支,我们是不在乎你什么时候拉的分支,只在乎你什么时候合并的分支,所以这儿rebase 也能起到很好的过滤无用信息的作用。
那我们什么时候时候使用merge?原则思想是,当我们在乎 我们分支拉取的时间,需要保留这个信息的时候,我们要同步主分支的代码时就使用merge。 例如: master上有hotfix分支更新,我们想把master上的hotfix修改的代码 同步到我们本月开发分支 dev-2023-02 上时,这个时候就需要使用 merge, 为什么不能用rebase?
因为我们在意 我们dev-2023-02分支 拉取的时间(这个是月度开发分支,基准点具有一定的参考意义,不能随意改变)

具体关于merge 和rebase 的区别,参考 https://juejin.cn/post/7135261815935598600
2. 为什么要去规范git流程?

  1. git 分支合并记录清晰,明了。了解一个项目从代码合并分支图,能很清晰看到这个版本的需求情况
  2. 有利于分支管理和代码管理,如遇到需要 代码回退情况,清晰的合并记录能很简单解决回退问题,且不容易出现代码掉了的情况
  3. 有利于冲突的解决,每个合并分支都先进行rebase,后续代码合并都是最小冲突的版本。
  4. 有利于解决 私有化部署 反复来回合并 出现大量冲突问题。
  5. 加上其他的一些流程优化,让我们整体流程变得更加合理,规范,便于管理,减少冲突
  6. 分支合并后,就遗弃。重新从开发分支上拉分支。尽量不要一个分支用到底。

标签:git,name,流程,合并,merge,Git,优化,rebase,分支
From: https://www.cnblogs.com/honkerzh/p/17768863.html

相关文章

  • Git在工作中的基本应用
    一Git的起源Git的定义有一句名言"你要知道从哪里来,才能知道未来可能通向何方"。所以我们首先肯定聊的就是Git的起源。那么Git的定义是什么?Git是一种分布式开源版本管理工具(VCS),你可以用它存储代码、跟踪修订历史记录、合并代码更改,并在需要时恢复为较早的代码版本......
  • Git相关原理
    一Git是什么?Git是一种分布式开源版本管理工具(VCS),你可以用它存储代码、跟踪修订历史记录、合并代码更改,并在需要时恢复为较早的代码版本。二Git分区工作区workingdirectory是「工作目录」,也就是我们肉眼能够看到的文件暂存区(Index)本地仓库区(Repository)远程仓库......
  • Git 分布式版本控制工具
    1.前言1.1什么是GitGit是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。其他的版本控制工具软件:SVNCVSVSS1.2使用Git能做什么代码回溯:Git在管理文件过程中会记录日志,方便回退到历史版本版本切换:Git存在分支......
  • git入门
    git入门今天在学习黑马的实战项目时讲到了git,突然发现我还没有学过这部分内容,然后去b站找到了大佬狂神的这部分课,有参考了一些笔记(相关链接放在文末),自己随便总结了一下,以方便日后回顾学习。1.什么是版本控制版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、......
  • 最优性剪枝,可行性剪枝,优化搜索顺序,排除等效冗余
    杨辉三角:  //https://www.luogu.com.cn/problem/P1118//最优性剪枝://由高中知识可得,abcd四个数符合杨辉三角的数相乘,即//res=a+3*b+3*c+d,前面的常数项也就是杨辉三角的数字//根据此结论,进行剪枝//由于暴力枚举全排列+部分剪枝不可过,所以要考虑方法性剪枝......
  • java程序的运行流程(jdk,jre,jvm的关系)
    资料来源于第8课:https://www.bilibili.com/video/BV1o841187iP?p=8&spm_id_from=pageDriver&vd_source=c3a656550cf5d38944e8878bb7026cbc1.我们手写的java 代码为.java后缀文件储存在src当中。2.经过jdk中的bin中的javac.exe文件编译出.class文件的字节码。3.字节码储存在ou......
  • 解决git提交每次都要输入密码
    在我们的项目目录下打开控制台,输入gitconfig--globalcredential.helperstore然后生成一个.git-credentials,上边记录你的账号和密码,只需要输入一次用户名和密码,就会把账户信息保存到这个文件中。下次就不会弹出让你输入用户名和密码的提示啦......
  • milkv-duo启动流程分析:手动构建boot.sd
    目录上电测试制作boot.sd编译Linux内核multi.its上电测试在上一篇,我们构建了fip.bin。让我们继续用以前的boot.sd。我们插上电源,U-Boot2021.10(Oct152023-14:17:51+0800)cvitek_cv180xDRAM:63.3MiBgd->relocaddr=0x82435000.offset=0x2235000MMC:cv-sd@43100......
  • CentOS7部署后优化配置
    1.安装必要的组件、升级yum-yinstallwgetvimcd/etc/yum.repos.d/rm-rf/etc/yum.repos.d/*.repowgethttp://mirrors.aliyun.com/repo/Centos-7.repowgethttps://mirrors.aliyun.com/repo/epel-7.repowgethttps://mirrors.aliyun.com/repo/epel.repowgethttps......
  • MySQL的InnoDB索引失效的场景和优化
    康师傅YYDS索引失效案例索引最好是全值匹配。where条件中等值比,同时where的条件一起创建联合索引。最佳左前缀如果有一个联合索引,要想使用到,需要从联合索引的最左边的字段开始写,一点一点的写上。主键插入顺序在InnoDB中,使用自增的主键。避免索引页面分裂计算、函数、类型......