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

ops/2024/12/22 1:59:39/

git%E4%BC%81%E4%B8%9A%E5%BC%80%E5%8F%91%E7%9A%84%E7%9B%B8%E5%85%B3%E7%90%86%E8%AE%BA%EF%BC%88%E4%B8%80%EF%BC%89">

目录

git%E4%BC%81%E4%B8%9A%E5%BC%80%E5%8F%91%E7%9A%84%E7%9B%B8%E5%85%B3%E7%90%86%E8%AE%BA%EF%BC%88%E4%B8%80%EF%BC%89-toc" style="margin-left:0px;">git企业开发的相关理论(一)

八.修改文件

九.版本回退

十.撤销修改

情况一(还没有add)

情况二(add后还没有commit) 

 情况三(commit后还没有push)

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

方法一

方法二

十二.理解分支

1.常见的分支工作流程

2.合并冲突

3.合并模式

4.分支策略及bug分支



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

八.修改文件

由文章(一),我们可以清楚地知道,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分支的相对稳定。 


http://www.ppmy.cn/ops/143908.html

相关文章

【优选算法---分治】快速排序三路划分(颜色分类、快速排序、数组第K大的元素、数组中最小的K个元素)

一、颜色分类 题目链接: 75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 题目介绍&#xff1a; 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地 对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序…

MySQL 8.0与PostgreSQL 15.8的性能对比

以下是MySQL 8.0与PostgreSQL 15.8的性能对比&#xff1a; MySQL 8.0性能特点&#xff1a; MySQL在处理大量读操作时表现出色&#xff0c;其存储引擎InnoDB提供了行级锁定和高效的事务处理&#xff0c;适用于并发读取的场景。MySQL通过查询缓存来提高读取性能&#xff0c;查询缓…

子域提取工具,子域名收集神器,支持多种数据源和枚举选项,域名发现工具,可以为任何目标枚举海量的有效子域名,安全侦察工具,利用证书透明原则监控部署的新子域

子域提取工具&#xff0c;子域名收集神器&#xff0c;支持多种数据源和枚举选项&#xff0c;域名发现工具&#xff0c;可以为任何目标枚举海量的有效子域名&#xff0c;安全侦察工具&#xff0c;利用证书透明原则监控部署的新子域。 需要对目标域名的子域进行深入分析&#xff…

C语言中,假如我一个C文件包含了两个头文件,而两个头文件中都有对同一个宏或结构体的定义,编译时如何处理?

两个头文件中都有对同一个宏的定义的情况 在C语言中&#xff0c;如果两个头文件中都定义了同一个宏&#xff0c;并且你在C文件中包含了这两个头文件&#xff0c;会发生宏重新定义的问题。编译器的处理方式取决于宏的具体定义内容&#xff1a; 1. 如果两个宏定义完全相同&…

第十四届蓝桥杯Scratch国赛真题—转动的车轮

转动的车轮 编程实现&#xff1a; 转动的车轮&#xff08;车轮使用画笔绘制&#xff0c;画面中不能出现其他角色&#xff0c;否则0分&#xff09;。 注&#xff1a;角色、背景非源素材。 具体要求&#xff1a; 1). 点击绿旗&#xff0c;背景如图所示&#xff1b; 2). 等待1…

博世智驾新动力:Apache DolphinScheduler如何征服数据处理挑战

视频及PPT等相关资料&#xff1a;点击查看 讲师介绍 陶超权&#xff0c;博世智驾&#xff08;中国&#xff09;后端工程师&#xff0c;负责数据处理和数据调度方面工作&#xff0c;在智能驾驶数据处理领域具有丰富的实践经验。在2024年12月Apache DolphinScheduler社区线上交流…

ffmpeg.exe 命令使用

1. 视频分片&#xff1a;裁剪分割视频成小片段&#xff0c; ffmpeg Documentation Seeking – FFmpeg 1.指定持续时间 使用-t命令。前者要比后者快。 ffmpeg -ss [start] -i [input] -t [duration] -c copy [output] ffmpeg -i [input] -ss [start] -t [duration] -c cop…

安徽移动携手开源网安亮相2024中国国际车联网技术大会,共筑车联网安全新壁垒

近日&#xff0c;由中国通信学会和四川省经济和信息化厅联合主办的2024中国国际车联网技术大会在成都举行。安徽移动联合开源网安推出“基于模糊测试技术的车联网安全检测解决方案”亮相本次大会。该方案已在多家汽车制造商、车载系统开发商落地实践&#xff0c;帮助其深度挖掘…