当前位置: 首页 > news >正文

Git工作流

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

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 ,没有就创建
  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 feature把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记录。

相关文章:

Git工作流

实际开发项目使用到的分支: main:生产环境,也就是你们在网上可以下载到的版本,是经过了很多轮测试得到的稳定版本。 release: 开发内部发版,也就是测试环境。 dev:所有的feature都要从dev上checkout。 fea…...

【Git Bash】简明从零教学

目录 Git 的作用官网介绍简明概要 Git 下载链接Git 的初始配置配置用户初始化本地库 Git 状态查询Git 工作机制本地工作机制远端工作机制 Git 的本地管理操作add 将修改添加至暂存区commit 将暂存区提交至本地仓库日志查询版本穿梭 Git 分支查看分支创建与切换分支跨分支修改与…...

【QT5-自我学习-线程qThread练习-两种使用方式-2:通过继承Qobject类-自己实现功能函数方式-基础样例】

【QT5-自我学习-线程qThread练习-两种使用方式-2:通过继承Qobject类-自己实现功能函数方式-基础样例】 1、前言2、实验环境3-1、学习链接-参考文章3-2、先前了解-自我总结(1)线程处理逻辑事件,不能带有主窗口的事件(2&…...

两款开箱即用的Live2d

目录 背景第一款:开箱即用的Live2d在vue项目中使用html页面使用在线预览依赖文件地址配置相关参数成员属性源码 模型下载 第二款:换装模型超多的Live2d在线预览代码示例源码 模型下载 背景 从第一次使用服务器建站已经三年多了,记得那是在2…...

LAMP架构详解+构建LAMP平台之Discuz论坛

LAMP架构详解构建LAMP平台之Discuz论坛 1、LAPM架构简介1.1动态资源与语言1.2LAPM架构得组成1.3LAPM架构说明1.4CGI和astcgi1.4.1CGI1.4.2fastcgi1.4.3CGI和fastcgi比较 2、搭建LAMP平台2.1编译安装apache httpd2.2编译安装mysql2.3编译安装php2.4安装论坛 1、LAPM架构简介 1.…...

如何使用腾讯云服务器搭建网站?新手建站教程

使用腾讯云服务器搭建网站全流程,包括轻量应用服务器和云服务器CVM建站教程,轻量可以使用应用镜像一键建站,云服务器CVM可以通过安装宝塔面板的方式来搭建网站,腾讯云服务器网分享使用腾讯云服务器建站教程,新手站长搭…...

mybatis plus 控制台和日志文件中打印sql配置

1 控制台输出sql 配置mybatis-plus的日志实现类为StdOutImpl,该实现类中打印日志是通过System.out.println(s)的方式来打印日志的 mybatis-plus:configuration:log-impl: org.apache.imbatis.logging.stdout.StdOutImpl2 日志文件中写入sql 日志文件中输入sql需要…...

苍穹外卖总结

前言 1、软件开发流程 瀑布模型需求分析//需求规格说明书、产品原型↓ 设计 //UI设计、数据库设计、接口设计↓编码 //项目代码、单元测试↓ 测试 //测试用例、测试报告↓上线运维 //软件环境安装、配置第一阶段:需求分析需求规格说明书、产品原型一般来说…...

Git 删除已经合并的本地分支

在使用 Git 的开发流程中,经常会创建很多的 Git 分支,包括功能分支(features/*)、发布分支(release/*)和 hotfix 分支(hotfix/*)。在开发了一段时间之后,本地就会有出现很…...

递归算法应用(Python版)

文章目录 递归递归定义递归调用的实现递归应用数列求和任意进制转换汉诺塔探索迷宫找零兑换-递归找零兑换-动态规划 递归可视化简单螺旋图分形树:自相似递归图像谢尔宾斯基三角 分治策略优化问题和贪心策略 递归 递归定义 递归是一种解决问题的方法,其精…...

有什么react进阶的项目推荐的?

前言 整理了一些react相关的项目,可以选择自己需要的练习,希望对你有帮助~ 1.ant-design Star:87.1k 阿里开源的react项目,作为一个UI库,省去重复造轮子的时间 仓库地址:https://github.com/ant-design/…...

基于串口透传模块,单片机无线串口空中下载测试

基于串口透传模块,单片机无线串口空中下载测试 ✨无线串口下载,其本质还是串口下载方式,只不过省去了单片机和ISP上位机工具之间的物理有线连接,中间的数据通过无线串口透传模块进行数据中转,传递到单片机串口上。串口…...

研磨设计模式day11代理模式

目录 场景 代码实现 ​编辑 解析 定义 代理模式调用示意图 代理模式的特点 本质 ​编辑何时选用 场景 我有一个订单类,包含订单数、用户名和商品名,有一个订单接口包含了对订单类的getter和setter 现在有一个需求,a创建的订单只…...

vue2 路由进阶,VueCli 自定义创建项目

一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话,需要给当前跳转的导航加样式,同时要移除上一个a标签的样式,太麻烦!!! 2.解决方案 vue-router 提供了一个全局组件 router…...

《C语言编程环境搭建》工欲善其事 必先利其器

C语言编译器 GCC 系列 GNU编译器套装(英语:GNU Compiler Collection,缩写为GCC),指一套编程语言编译器,常被认为是跨平台编译器的事实标准。原名是:GNU C语言编译器(GNU C Compiler)。 MinGW 又称mingw32 &#xff0c…...

蓝蓝设计ui设计公司作品案例-中节能现金流抗压测试软件交互及界面设计

中国节能是以节能环保为主业的中央企业。中国节能以生态文明建设为己任,长期致力于让天更蓝、山更绿、水更清,让生活更美好。经过多年发展,中国节能已构建起以节能、环保、清洁能源、健康和节能环保综合服务为主业的41产业格局,成…...

汽车制造业外发文件时 如何阻断泄密风险?

汽车制造业是我国国民经济发展的支柱产业之一,具有产业链长、关联度高、就业面广、消费拉动大等特性。汽车制造行业景气度与宏观经济、居民收入水平和固定资产投资密切相关。 汽车制造业产业链长,关联度高,汽车制造上游行业主要为钢铁、化工…...

怎么对App进行功能测试

测试人员常被看作是bug的寻找者,但你曾想过他们实际是如何开展测试的吗?你是否好奇他们究竟都做些什么,以及他们如何在一个典型的技术项目中体现价值?本文将带你经历测试人员的思维过程,探讨他们测试app时的各种考虑. …...

数字流的秩、单词频率(哈希实现)

题目1:数字流的秩 假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说: 实现 track(int x) 方法,每读入一个数字都会调用该方法…...

【洛谷】P2678 跳石头

原题链接:https://www.luogu.com.cn/problem/P2678 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二分答案。(使用二分需要满足两个条件。一个是有界,一个是单调。 这题的题面:使得选手们在比赛过程中…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...