Git工作流

news2024/9/21 19:09:44

实际开发项目使用到的分支:

main:生产环境,也就是你们在网上可以下载到的版本,是经过了很多轮测试得到的稳定版本。
release: 开发内部发版,也就是测试环境。
dev:所有的feature都要从dev上checkout。
feature:每个需求新创建的分支。
下面介绍一下一个新需求过来的git操作流程:
1.从dev分支上checkout -b new-feature,进行开发
2.开发完后,经过自测没问题了,准备发版
3.merge到release分支上进行发版,并打tag
4.有bug就直接在release上进行修改,改完再次发版,打tag,直到测试人员验证完毕
5.这时可以将release分支合并到dev上,也可以删除掉feature分支了,并等待通知是否将此功能上线(发布正式版本,也就是在正式服务器上运行),如果上线,那就merge到main(master)分支,当然了有可能需要将ip改为生产服务器的地址,并打上一个official tag。
6.如果上线后,发现有bug,如果此时main分支已经又合并上新功能B了,但是这个临时的版本又不想包含B的功能,那么可以切换到上次的official tag,checkout -b一个hotfix分支进行bug修复,hotfix分支要进行保留,不能删除。测试没问题就可以发版了,最后可以合并到main上。
一般的项目这套流程应该就足够了。所有的发版tag都会集中到release,main,hotfix分支上,所有的需求都会从dev上拉取,这样能保证代码是完整可用的,是经过每次release合并过来的

指令及其含义

  • git checkout -b xxx:git checkout xxx是指切换到xxx(用local区的xxx替换disk区文件),-b意味着branch,即创建新分支,这条指令合起来意思是创建并切换到xxx。
  • git diff:查看暂存区与disk区文件的差异。
  • git add xxx:将xxx文件添加到暂存区。
  • git commit:将暂存区内容添加到local区的当前分支中。
  • git push :将local区的LocalBranchName分支推送到RemoteHostName主机的同名分支。(若加-f表示无视本地与远程分支的差异强行push)
  • git pull :同上,不过改成从远程主机下载远程分支并与本地同名分支合并。
  • git rebase xxx:假设当前分支与xxx分支存在共同部分common,该指令用xxx分支包括common在内的整体替换当前分支的common部分(原先xxx分支内容为common->diversityA,当前分支内容为common->diversityB,执行完该指令后当前分支内容为common->diversityA->diversityB)。
  • git branch -D xxx:不加-D表示创建新local分支xxx,加-D表示强制删除local分支xxx。

工作流一:

在这里插入图片描述

  1. git clone remote// 到本地
  2. git checkout -b feature 切换至新分支feature
    (相当于复制了remote的仓库到本地的feature分支上
  3. 修改或者添加本地代码(部署在硬盘的源文件上)
  4. git diff 查看自己对代码做出的改变
  5. git add 上传更新后的代码至暂存区
  6. git commit 可以将暂存区里更新后的代码更新到本地git
  7. git push origin feature将本地的feature分支上传至github上的git

如果在写自己的代码过程中发现远端GitHub上master分支代码出现改变

  1. git checkout master切换回master分支
  2. git pull origin master将远端修改过的代码再更新到本地
  3. git checkout feature回到feature分支
  4. git rebase master把我的修改先都放在一边,然后把master最新的修改拿过来,接着在这个最新修改的基础之上,再把我的commit尝试弄回去,中途可能会出现rebase conflict手动选择保留哪段代码,就相当于我们在最新的master分支上做了修改 ,这也是使用rebase而不是使用merge的好处
  5. git push -f origin xxx 把rebase后并且更新过的代码再push到远端github上,由于做了rebase所以需要加上-f ,-f表示强行,强行push
  6. 把更新的代码合并到远程master分支里面,pull request的意思是request项目的主人把我这个新的分支的改变给pull到这个项目里去。原项目主人采用pull request 中的 squash and merge 合并所有不同的commit

远端完成更新后

  1. github删除个人远程分支feature
  2. 本地切换到主分支git checkout master && git branch -d feature删除本地的git分支
  3. git pull origin master 再把远端的最新代码拉至本地,这时我们的本地仓库就又和远程一样了。

工作流二:

远程仓库有两个master和test分支

  1. git clone remote克隆仓库
  2. git checkout -b feature切换分支,没有就会新创建并切换
  3. 编写代码并提交本地仓库
  4. 推送到远程test分支
  5. git checkout -b test origin/test意思是切换一个分支,如果分支不存在就会创建并切换到test分支,后面origin/test是指从远程test克隆下来,并与本地test分支建立联系,这时,文件里没有新编写的代码。
  6. 切换到feature分支使用git log查看提交历史记录,记录以前提交的哈希值
  7. 切换到test分支,使用git cherry-pick 哈希值,这时代码就同步过来了,可以再次使用git log查看。
  8. git push到远程test分支
  9. 同步到远程master分支,如果此时远程master分支有更新,需要切换到master分支使用git pull保证本地master分支是最新的,然后使用git cherry-pick 哈希值,这时代码就同步过来了,可以再次使用git log查看,再push到远程分支。

工作流三: git pull

  1. 本地修改代码,远程也更新代码,产生冲突
  2. 使用git pull后需要手动merge
  3. git add .
  4. git commit -m “合并冲突”
  5. git push
  6. git log --graph
    在这里插入图片描述

缺点:提交记录出现分叉,出现很多奇怪的提交记录。

工作流四: git pull --rebase优化提交记录

现象:提交记录出现分叉,出现很多奇怪的提交记录。

业务场景:

在本地分支完成了我功能的开发,现在需要合并到test 分支上,于是我的目标是在test 分支上执行git cherry-pick操作将我的代码检出到test上,因为我要避免有人更新过test分支,所以我在此之前先执行了一下git pull ,出现了一个Merge的vi窗口(过去我一直没注意, 直接就wq出去
.了),其实这个就是导火索! vi窗口如下:

原因

git pull 其实是一个组合操作,其会执行git fetch + git merge (过去其实完全不知道) , 因为
有git merge的存在,所以最后的提交记录看起来就会很乱。

解决方案

使用git pull --rebase 来进行合并本地和远程分支。既可以完美解决这个问题!
git pull --rebase 也是一个组合操作, 其会执行git fetch + git rebase ,我们知道git rebase 就
是解决凌乱记录的一个大杀器,所以可以完美的解决!

  1. 本地修改代码,远程也更新代码,产生冲突
  2. 使用git pull --rebase origin test需要手动处理冲突
    在这里插入图片描述
    current change变为了远程,意味着更新版本是以远程为基础的大的提交,不会是含有本地每次小的提交。
  3. git add .
  4. git rebase --continue
  5. wq即可
  6. git push
  7. git log --graph
    在这里插入图片描述
    这样操作之后我们的提交记录就是非常干净的一条链路了!
    在这里插入图片描述
    补充:
git log --graph

更加清晰的结构查看log记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/932038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C51 GPIO的原理和内部结构】

51单片机项目基础篇 中篇:介绍GPIO1、认识GPIO2、GPIO 结构框图与工作原理2.1、P0端口结构框图与工作原理2.1.1、剖析组成 P0 口的每个单元的作用2.1.2、 P0 口做为 I/O 口及地址/数据总线使用时的具体工作过程 2.2、P1 端口结构框图与工作原理2.3、P2 端口结构框图…

求生之路2社区服务器sourcemod安装配置搭建教程centos

求生之路2社区服务器sourcemod安装配置搭建教程centos 大家好我是艾西,通过上文我们已经成功搭建了求生之路2的服务端。但是这个服务端是纯净的服务端,就是那种最纯粹的原版。如果想要实现插件、sm开头的命令等功能,需要安装这个sourcemod。…

JavaScript(笔记)

目录 Hello World JavaScript 的变量 JavaScript 动态类型 隐式类型转换 JavaScript 数组 JavaScript 函数 JavaScript 中变量的作用域 对象 DOM 选中页面元素 事件 获取 / 修改元素内容 获取 / 修改元素属性 获取 / 修改 表单元素属性 获取 / 修改样式属性 新…

如何可以管理监督员工工作微信?

自从微信管理系统研发上线之后,为了各企业带来了福音。 很多用户企业都是这样评论微信管理系统的:员工的所有微信聊天记录后台都可以清楚明了的看到,聊天记录都是永久保存的,不担心员工在手机上把聊天记录删除,杜绝员…

基于黑猩猩算法优化的BP神经网络(预测应用) - 附代码

基于黑猩猩算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于黑猩猩算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.黑猩猩优化BP神经网络2.1 BP神经网络参数设置2.2 黑猩猩算法应用 4.测试结果:5.Matlab代…

MyBatis 的关联关系配置 一对多,一对一,多对多 关系的映射处理

目录 一.关联关系配置的好处 二. 导入数据库表: 三. 一对多关系:-- 一个订单对应多个订单项 四.一对一关系:---一个订单项对应一个订单 五.多对多关系(两个一对多) 一.关联关系配置的好处 MyBatis是一…

Java——它要求用户输入一个整数(实际上是一个字符串),然后计算该整数的平方值,并将结果输出。

这是一个Java程序,它要求用户输入一个整数(实际上是一个字符串),然后计算该整数的平方值,并将结果输出。程序的基本流程如下: 首先,声明并初始化变量data和result,它们的初始值都为…

咸鱼之王俱乐部网站开发

我的俱乐部 最新兑换码 *注意区分大小写,中间不能有空格! APP666 HAPPY666 QQ888 QQXY888 vip666 VIP666 XY888 app666 bdvip666 douyin666 douyin777 douyin888 happy666 huhushengwei888 taptap666 周活动 宝箱周 宝箱说明 1.木质宝箱开启1个…

Netty入门学习和技术实践

Netty入门学习和技术实践 Netty1.Netty简介2.IO模型3.Netty框架介绍4. Netty实战项目学习5. Netty实际应用场景6.扩展 Netty 1.Netty简介 Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具&…

nuxt.js框架使用swiper的5.4.5版本记录,创建广告位幻灯片

nuxt依赖 “nuxt”: “^2.15.8”, “swiper”: “^5.4.5”, “vue”: “^2.7.10”, “vue-awesome-swiper”: “^4.1.1”, 需要完成的效果是 参考地址&#xff1a;https://3.swiper.com.cn/demo/pcSlide/ nuxt代码&#xff1a; <template><div class"page&quo…

基于AI + Milvus Cloud拓展更多、更丰富的AI应用场景

项目后续:探索更多应用场景 欢迎大家基于本项目拓展更多、更丰富的应用场景,例如: 进一步延伸对比功能,例如将不同的单品归类到一起。同样,也可以上传更多图像到数据库中,丰富查询结果。 将本项目转变为时尚探测仪或者时尚推荐系统。例如,将明星图像替换成可购买的…

软件开发的201个原则 阅读笔记 第172-201个原则

目录 原则172 做项目总结 第8章 产品保证原则 原则173 产品保证并不是奢侈品 原则 174 尽早建立软件配置管理过程 原则175 使软件配置管理适应软件过程 原则176 组织SCM 独立于项目管理 原则 177 轮换人员到产品保证组织 给所有中间产品一个名称和版本 原则179 控制基准 原则…

五、多表查询-4.1子查询和分类

一、概念 SQL语句中嵌套select语句&#xff0c;成为嵌套查询&#xff0c;又称子查询。 子查询外部的语句 可以是 insert / update / delete / select 的任何一个。 二、子查询分类 1、根据子查询结果不同 标量子查询&#xff08;子查询结果为单个值&#xff09;、列子查询&a…

Xmind软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 XMind是一款非常流行的思维导图软件&#xff0c;可以帮助用户创建清晰、美观的思维导图&#xff0c;用于记录、整理思维和团队协作。以下是关于XMind软件的详细介绍。 1、XMind的历史和演变 XMind是由北京心图科技有限公司开发…

算法通过村第8关【青铜】| 二叉树的经典算法题

二叉树的双指针 1.相同的树 思路&#xff1a;递归的挨个比较是否相同 class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if((p null&&q!null) || (p ! null && q null) || (p!null&&q!null&&p.val ! q.val)){return f…

安全帽穿戴检测人脸闸机联动

安全帽穿戴检测人脸闸机联动系统实通过yolov8网络深度学习算法模型&#xff0c;安全帽穿戴检测人脸闸机联动系统现对进入工地施工区域人员是否穿戴安全帽进行精准监测和身份识别&#xff0c;只有在满足这两个条件的情况下&#xff0c;闸机才会打开&#xff0c;允许其进入工地施…

器件介绍TMP1826NGRR、TMP1826DGKR、TMP1827NGRR、TMP1075NDRLR数字温度传感器

一、TMP1826 具有 2Kb EEPROM 的 1-Wire、0.2C 精度温度传感器 器件介绍 TMP1826 是一款高精度、1-Wire 兼容的数字输出温度传感器&#xff0c;具有集成的 2Kb EEPROM 和 –55C 至150C 的宽工作温度范围。TMP1826 在 10C 至45C 的温度范围内提供 0.1C&#xff08;典型值&#…

如何搭建数字化招商加盟体系?如何推动企业招商加盟增速?

线索转化率低、客户数据不完整及合作过程中服务满意度低等情景是企业在进行招商加盟的过程中常常会遇到的问题。如何使用数字化招商加盟工具&#xff0c;在业务运营的过程中来提高企业成单率、提高企业线索价值&#xff0c;提高客户满意度&#xff1f; 开利网络数字化招商加盟系…

大语言模型之六- LLM之企业私有化部署

数据安全是每个公司不得不慎重对待的&#xff0c;为了提高生产力&#xff0c;降本增效又不得不接受新技术带来的工具&#xff0c;私有化部署对于公司还是非常有吸引力的。大语言模型这一工具结合公司的数据可以大大提高公司生产率。 私有化LLM需要处理的问题 企业内私有化LLM…

图论(基础)

知识&#xff1a; 顶点&#xff0c;边 | 权&#xff0c;度数 1.图的种类&#xff1a; 有向图 | 无向图 有环 | 无环 联通性 基础1&#xff1a;图的存储&#xff08;主要是邻接矩阵和邻接表&#xff09; 例一&#xff1a;B3643 图的存储 - 洛谷 | 计算机科学教育新生态 (…