git企业开发的相关理论(二)

目录

git企业开发的相关理论(一)

八.修改文件

九.版本回退

十.撤销修改

情况一(还没有add)

情况二(add后还没有commit) 

 情况三(commit后还没有push)

十一.删除本地仓库中的文件

方法一

方法二

十二.理解分支

1.常见的分支工作流程

2.合并冲突

3.合并模式

4.分支策略及bug分支



八.修改文件

由文章(一),我们可以清楚地知道,git追踪管理的其实是修改,而不是文件。如何知道这一点呢,接下来我们引入两个命令来查看修改前后的变化。

//    显示暂存区和工作区文件的差异(add前)
git diff [file]

//    查看版本库和工作区文件的区别(commmit前)
git diff HEAD -- [file]

1.我们可以看到,文件名有后缀还是要加上后缀,才能正常访问

2.我们其实可以直接cat README.txt查看文件,为什么还要多次一举呢?因为代码多了,区别就不容易找了。

3.我们可以看到git diff HEAD -- README.txt与git commit -m 'new'都是增加两行减少一行,而不是只是单纯地增加一行

九.版本回退

                                        关于README.txt的两个版本

第一次提交(README)

C++ direction learning log  --图片中将缩写为C++

第二次提交(new)

C++ direction learning log   --图片中将缩写为C++
new line  --图片中将缩写为new

//    本质是回退版本库中的内容
git reset [--soft | --mixed | --hard] [HEAD]

//    当回退版本以后,git log显示的版本也将回到那时
//    当clear后想吃后悔药,git log找不到回退前的哈希值
//    这时就需要如下命令
git reflog

 

如图介绍了使用不同命令之间的区别,同时应该慎用--hard,因为他会将工作区也一并回退,如果你此时正在开发新内容,new下写了几万字了,那这些也将一并回退,并且无法恢复。下面我将演示如何从new回退到C++,再回退到new。

为什么回退的速度如此只快呢?这就是为什么git被称作版本控制器的原因了,我们只是改变了HEAD指针的指向,回退只需要改其指向,指针指向的哈希值变了而已。 

十.撤销修改

//    撤销工作区对指定文件的修改,将文件恢复到 暂存区 或 最新提交版本 的状态。
//    还没有add
git checkout -- [filename]

情况一(还没有add)

情况二(add后还没有commit) 

 情况三(commit后还没有push)

十一.删除本地仓库中的文件

方法一

先在工作区中删除文件,再add,commit一遍,毕竟删除也是修改

方法二

git rm [file]

 先使用git命令删除文件,再commit一遍

由于比较简单,就不做演示,只是要注意删除本地仓库的文件,并非只删除工作区中的文件

十二.理解分支

什么是分支?分支有什么用?一个团队开发代码到一定阶段时,对下一阶段的目标产生了分歧,a有一个思路,b有一个思路,谁的思路最好呢,这时就用得到分支了,他允许开发者在不影响主线代码的情况下,进行独立的开发或试验。Git 的分支本质上是一个指向特定 提交对象(Commit) 的指针。(HEAD)

1.常见的分支工作流程

//    查看当前仓库中的分支
git branch
// 输出示例(*表示当前所在的分支)
// * main
//  develop
//  feature-xyz


//     创建一个新分支,但不会切换到该分支
git branch <file>


//    切换到指定分支   (注意不要与git checkout -- 混淆)
git checkout <file>


//    使用 -b 参数可以同时创建并切换到新分支
git checkout -b <file>


//    将其他分支的内容合并到当前分支
git merge <file>


//    删除本地分支
git branch -d <file>
//    强制删除(如分支未合并)
git branch -D <file>

下面介绍分支的一般流程,创建分支--在分支上开发--切换回主分支--合并分支--删除分支

 1.我们发现当我们切换一个分支对README.txt进行修改,再切换回来后,发现原来的分支上也出现了修改。这与我们隔离开原来的代码,单独开发的目的不符,这是为什么呢?原来,我们在创建一个新的分支进行修改后,必须add,commit,这样切换会原来的分支,就会发现,做出的修改不会作用于原来的分支。

2.为什么合并分支后建议删除分支?合并后删除无用分支的主要目的是为了保持代码库整洁,避免分支冗余、管理混乱和误操作,同时有助于提升团队协作效率。

2.合并冲突

当你在 Git 中合并分支时,如果两个分支修改了同一个文件的同一部分内容,Git 无法自动合并,便会产生合并冲突(Merge Conflict)。你需要手动解决这些冲突,然后完成合并操作。他通常发生在以下场景

  • 两个分支修改了同一文件的同一行。
  • 一方删除了某个文件,而另一方修改了这个文件。
  • 修改的代码在逻辑上存在冲突。

 下面演示合并冲突发生的原因及解决办法

 我们可以看到当发生合并冲突时会出现如下代码

Auto-merging file.txt
CONFLICT (content): Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.

解决这种冲突也很朴素,就是直接打开冲突文件,自己选择保留,更改哪些代码。

<<<<<<< HEAD
分支 A 的修改内容
=======
分支 B 的修改内容
>>>>>>> feature-branch

//  <<<<<<< HEAD 表示当前分支的修改内容。
//  ======= 是分隔线。
//  >>>>>>> feature-branch 表示被合并分支(如 feature-branch)的修改内容。

3.合并模式

 这里我们只讨论两种合并模式,快进模式和非快进模式。笔者上网查阅这两种的区别时,发现他们的可视化图对于初学者其实不太友好,因为合并前这两种模式的可视化图在我看来并无区别。在这里就用最朴素的方式进行讲解。快进模式就是十二的1.常见的的分支工作流程,非快进模式就是2.合并冲突。区分他们的关键就在于当你切换一个新的分支提交代码后,再切回原来的分支,你有没有提交代码,有就是非快进模式,没有就是快进模式。

//    为了团队协作中便于追踪合并来源,通常推荐使用非快进合并
git merge feature --no-ff

4.分支策略及bug分支

我们创建分支,希望遵循以下原则来确保效率,安全

1.我们希望所有的分支分工明确,master分支是主分支,develop分支负责开发,bug分支负责修bug,因此也希望分支名要能反应分支的功能

2.我们希望分支尤其是主分支保持相对稳定

3.我们希望避免不必要的分支,也包括删除已经完成其使命的分支

在bug分支中,当bug修完后,master分支版本更新了,我们建议先让bug分支合并主分支,然后在bug分支上解决完可能出现的问题,再让master分支合并bug分支,来确保master分支的相对稳定。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络压缩版

计算机网络到现在零零散散也算过了三遍&#xff0c;一些协议大概了解&#xff0c;但总是模模糊糊的印象&#xff0c;现在把自己的整体认识总结一下&#xff0c;&#xff08;本来想去起名叫《看这一篇就够了》&#xff0c;但是发现网上好的文章太多了&#xff0c;还是看这篇吧&a…

重温设计模式--状态模式

文章目录 状态模式&#xff08;State Pattern&#xff09;概述状态模式UML图作用&#xff1a;状态模式的结构环境&#xff08;Context&#xff09;类&#xff1a;抽象状态&#xff08;State&#xff09;类&#xff1a;具体状态&#xff08;Concrete State&#xff09;类&#x…

JVM执行引擎JIT深度剖析

前端编译与后端编译 Java 程序的编译过程是分两个部分的。一个部分是从java文件编译成为class文件&#xff0c;这一部分也称为前端编译。另一个部分则是这些class文件&#xff0c;需要进入到 JVM 虚拟机&#xff0c;将这些字节码指令编译成操作系统识别的具体机器指令。这一部…

五分钟学会如何在GitHub上自动化部署个人博客(hugo框架 + stack主题)

上一篇文章&#xff1a; 10分钟学会免费搭建个人博客&#xff08;Hugo框架 stack主题&#xff09; 前言 首先&#xff0c;想要实现这个功能的小伙伴需要完成几个前置条件&#xff1a; 有一个GitHub账号安装了git&#xff0c;并可以通过git推送commit到GitHub上完成第一篇文章…

OpenHarmony的分布式服务框架介绍与实现解析

OpenHarmony的分布式服务框架是一个用于实现设备间高效协作与资源共享的重要架构&#xff0c;以下是其详细介绍&#xff1a; 框架概述 OpenHarmony的分布式服务框架基于分布式软总线、分布式数据管理、分布式Profile等技术特性&#xff0c;构建了统一的分布式服务管理机制&am…

360pika—弹性 KV 数据存储系统入门安装使用

一、简介 github官网说Pika 是一个高性能、大容量、多租户、数据持久化的弹性 KV 数据存储系统,使用 RocksDB 作为存储引擎。它完全兼容 Redis 协议,并支持其常用的数据结构,如字符串/哈希/列表/有序集合/集合/地理位置/HyperLogLog/发布-订阅/位图/数据流等。 二、对标啥能干…

springboot中使用gdal将表中的空间数据转shapefile文件

springboot中使用gdal将表中的空间数据转shapefile文件 代码&#xff1a; // 样本导出-将样本表导出为shapefile&#xff0c;复制样本shp文件到临时目录下 sampleDir是文件夹pathpublic void setYbShapeFile(Yb yb, File sampleDir) {// 创建 前时项 和 后时项 文件夹File y…

【学习笔记】蒙特卡洛与强化学习

视频链接&#xff1a;https://www.bilibili.com/video/BV1SV4y1i7bW 文章目录 [蒙特卡洛方法] 02 重要性采样&#xff08;importance sampling&#xff09;及 python 实现Basics实现重要性采样 [蒙特卡洛方法] 03 接受/拒绝采样&#xff08;accept/reject samping&#xff09;初…

查看MySQL存储引擎方法,表操作

修改数据库表存储引擎 show create table dept; show table status from itpux where name s2\G; select * from information_schema.TABLES where table_schemaitpux and table_names3; 查询整个mysql里面存储引擎是innodb/myisam的表 建表时候要写好存储引擎 -- 创建表 -- 表…

项目亮点案例

其实对我来说是日常操作&#xff0c;但是如果在面试的时候面试者能把日常的事情总结好发出来&#xff0c;其实足矣。 想让别人认同项目&#xff0c;选取的示例需要包含以下要素&#xff1a; 亮点项目四要素&#xff1a;明确的目标&#xff0c;问题点&#xff0c;解决方法和结果…

MyBatis通过注解配置执行SQL语句原理源码分析

文章目录 前置准备流程简要分析配置文件解析加载 Mapper 接口MapperAnnotationBuilder解析接口方法注解parseStatement 方法详解MapperBuilderAssistant 前置准备 创建一个mybatis-config.xml文件&#xff0c;配置mapper接口 <mappers><!--注解配置--><mapper…

蓝桥杯物联网开发板硬件组成

第一节 开发板简介 物联网设计与开发竞赛实训平台由蓝桥杯大赛技术支持单位北京四梯科技有限公司设计和生产&#xff0c;该产品可用于参加蓝桥杯物联网设计与开发赛道的竞赛实训或院校相关课程的 实践教学环节。 开发板基于STM32WLE5无线微控制器设计&#xff0c;芯片提供了25…

常用矢量图标库

常用矢量图标库 1. iconfont 阿里巴巴旗下的矢量图标素材库&#xff1b;很强大且图标内容很丰富的矢量图标库,提供矢量图标下载&#xff08;AI / SVG / PNG / 代码格式&#xff09;、在线存储等功能&#xff0c;支持按路径改变 icon 颜色。 iconfont 网址 设备图标 2. IconP…

Unity动态读取外部图片转Texture2D,内存过大问题解决方案

问题描述 加载原始图片2.63M的图片,分辨率为3023*4032,占用内存108.5M 加载原始图片12.6 M的图片,分辨率为6000*8000,占用内存427.2M 太恐怖了吧 解决方案 1.加载完图片,等比缩放,宽高改为1024或者512以下 1024占用5.2M,512占用1.3M,相比小了很多 2.原始Texture2…

在Visual Studio 2022中配置C++计算机视觉库Opencv

本文主要介绍下载OpenCV库以及在Visual Studio 2022中配置、编译C计算机视觉库OpenCv的方法 1.Opencv库安装 ​ 首先&#xff0c;我们需要安装OpenCV库&#xff0c;作为一个开源库&#xff0c;我们可以直接在其官网下载Releases - OpenCV&#xff0c;如果官网下载过慢&#x…

【AIGC】ChatGPT 结构化 Prompt 的高级应用

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;标识符的使用&#xff08;Use of Identifiers&#xff09;1. #2. <>3. - 或 4. [] &#x1f4af;属性词的重要性和应用应用场景 &#x1f4af;具体模块…

git使用和gitlab部署

1.ci,cd,DevOps ci&#xff1a;持续集成&#xff1a;开发的代码集成到代码仓库 cd&#xff1a;持续交互&#xff1a;从代码仓库拉取代码到部署到测试环境 cd&#xff1a;持续部署&#xff1a;从代码仓库拉取代码到部署到生产环境 DevOps:开发写完的代码自动集成&#xff0c…

学习因子异步化的粒子群优化算法(AsyLnCPSO)——源码

目录 1. 学习因子异步化的概念 2. 算法步骤 2.1 初始化 2.2 迭代过程 3.优势 4. 与传统粒子群算法的区别 5.代码下载&#xff1a; 学习因子异步化的粒子群优化算法&#xff08;AsyLnCPSO&#xff09;是一种改进的粒子群优化&#xff08;PSO&#xff09;算法&#xff0c;…

BEVFormer论文总结

BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers BEVFormer&#xff1a;利用时空变换从多相机图像中学习鸟瞰表示 研究团队&#xff1a;南京大学、上海AI实验室、香港大学 ​ 代码地址&#xff1a;https://g…

ABAQUS纤维混凝土冲击破坏三维模型

纤维混凝土作为土木工程领域常用的复合材料具备良好的抗裂性及抗冲击性能&#xff0c;纤维混凝土在荷载下的破坏行为及本构关系对其应用范围具有重要影响。本案例通过AutoCAD随机三维纤维插件建立随机投放的圆柱体纤维模型&#xff0c;并将模型导入ABAQUS内&#xff0c;通过混凝…