【掌握版本控制:Git 入门与实践指南】操作仓库文件|分支管理

 

                                               🎬慕斯主页修仙—别有洞天

                                              ♈️今日夜电波:泥中に咲く—ウォルピスカーター

                                                                0:34━━━━━━️💟──────── 4:46
                                                                    🔄   ◀️   ⏸   ▶️    ☰  

                                      💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍


 

目录

Git基本操作

查看修改操作

版本回退

工作区还没add,回退暂存区

已经add,没commit,回退版本库

已经 add ,并且也 commit,回退到上(一、二)版本

删除操作

分支管理

如何创建分支?

如何切换分支?

如何合并分支?

如何删除分支?

合并冲突问题

分支管理策略

如何通过分支处理bug?

删除临时分支分支


Git基本操作

查看修改操作

        我们可以通过如下命令得知git下文件是否有被修改:

git status

        该命令⽤于查看在你上次提交之后是否有对⽂件进⾏再次修改,如下:

        我们可以根据如下命令来查看差异:

git diff [file] //显⽰暂存区和⼯作区⽂件的
git diff HEAD -- [file] //查看版本库和⼯作区⽂件的

        例子:

        在这个diff中,--- 表示改动前,+++表为改动后,@@ -1 +1,2 @@表示了变化发生的位置。-1表示旧版本中的第一行,+1,2表示新版本中的第一行到第二行。

接着是具体的变化,-表示被删除的行,+表示被添加的行。在这个例子中,you can see me!是旧版本中的内容,而114514是新版本中新增的内容。

版本回退

我们可以使用以下的命令用于版本回退:

git reset [--soft | --mixed | --hard] [HEAD]
  1. --soft:仅回退HEAD指针,不改变暂存区和工作区。
  2. --mixed(默认模式):回退HEAD指针,同时重置暂存区,但保留工作区。
  3. --hard:回退HEAD指针,同时重置暂存区和工作区,丢弃所有更改。

        HEAD 说明:

可直接写成commit id,表⽰指定退回的版本

HEAD 表⽰当前版本

HEAD^ 上⼀个版本

HEAD^^上上⼀个版本

以此类推...

可以使⽤〜数字表⽰:

HEAD~0表⽰当前版本

HEAD~1上⼀个版本

HEAD^2上上⼀个版本

以此类推...

如下示例:


        如果我们回退错了,拿我们可以回退到之前提交的版本呢?

        使用如下命令查看记录本地的每⼀次命令 :

git reflog

        再使用如下命令来回退到对应的版本,这里就体现到我们commit时做的“标记”的作用了:

git reset --hard [commit id]

工作区还没add,回退暂存区

        通过如下命令可以让让⼯作区的⽂件回到最近⼀次 add 或 commit 时的状态 :

git checkout -- [file]

        如下:

已经add,没commit,回退版本库

git reset --mixed HEAD [file]

        如下:

已经 add ,并且也 commit,回退到上(一、二)版本

 git reset --hard HEAD^//(^根据要回退版本数量来决定)

        如下:

删除操作

        如果只是删除工作区和暂存库中的内容,可以使用以下命令:

git rm [file]

        如果想将版本库中也删除则再commit即可!

分支管理

如何创建分支?

        如下命令为查看以及创建分支:

git branch //查看,带上-a可看全部
git branch 分支名//创建对应的分支

        可以发现如果刚刚创建完分支,那么.git下会出现新的分支,并且 HEAD指向的是同一个修改。其中*表示为当前HEAD指向的分支。

        如何证明指向的是同一个修改:

        当我们新commit后,HEAD指向的分支跟着走:

如何切换分支?

        如下命令可以切换:

 git checkout 分支名

        在切换完成后,那么HEAD指向切换的分支,并且新commit会在该分支下:

        如下为图解:

如何合并分支?

        如下命令可以合并:

git merge 分支名

        需要注意的是:我们要合并在哪个分支上,首先要交让HEAD指向那个分支!例如:如下我要将maz分支合并到master上:

        图示如下:

如何删除分支?

        如下命令删除分支:

git branch -d 分支名

        如下图示:

        需要注意的是:因为创建、合并和删除分⽀⾮常快,所以Git⿎励你使⽤分⽀完成某个任务,合并后再删掉分⽀,这和直接在master分⽀上⼯作效果是⼀样的,但过程更安全。

合并冲突问题

        我们可以使用如下命令一步完成创建并且切换分支的操作:

git checkout -b 分支名

        在实际分⽀合并的时候,并不是想合并就能合并成功的,有时候可能会遇到代码冲突的问题,比如同一段代码:在master分支下位 aaa,另外一个分支下位 bbb。此时在合并时可能就会出现合并冲突的问题。Git会⽤<<<<<<<,=======, >>>>>>>来标记出不同分⽀的冲突内容 。此时我们必须要⼿动调整冲突代码,并需要再次提交修正后的结果!!

        如:根据提示提交对应的文件:如:add再commit。大致的图示如下:

        合并前:

        合并后:

        我们可以使用如下命令得到如上述图很像的分支情况:

git log --graph --pretty=oneline

分支管理策略

        通常我们在合并分支的时候,如果没有特意的指定合并模式,Git会采⽤ Fast forward 模式 。大致的合并效果如下(可以看到分支的信息并没有显示出来,删除分⽀后,查看分⽀历史时,会丢掉分⽀信息 ):


        上面我们提到的合并冲突是通过git log --graph --pretty=oneline指令很明显的看到与Fast forward 模式不同的效果,我们在删除了分支后如若可以在分⽀历史上就可以看出分⽀信息 。我们可以通过以下的选项强制禁用Fast forward 模式:

git merge --no-ff -m "阿巴阿巴" 分支名

        禁⽤ Fast forward 模式后合并会创建⼀个新的 commit ,所以加上 -m 参数,把描述写进去!

如何通过分支处理bug?

        假如我们现在正在 dev2 分⽀上进⾏开发,开发到⼀半,突然发现 master 分⽀上⾯有bug,需要解决 ,在Git中,每个bug都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀删除。 可现在 dev2 的代码在⼯作区中开发了⼀半,还⽆法提交,怎么办? 我们可以通过以下命令将当前的⼯作区信息进⾏储藏,被储藏的内容可以在将来某个时间恢复出来 :

git stash

        然后我们可切换到master分支上,新建一个分支来修复该bug,修复完成后合并master再删除该分支,那么我们此时还有回到dev2继续开发,因此切换回dev2分支,然后我们可以通过以下命令查看之前的工作现场去哪里了:

git stash list

        再通过以下命令恢复现场,并且把stash也删了:

 git stash pop

        也可以通过以下命令恢复现场,但是恢复后stash内容并不会被删除,而是需要额外的命令进行删除:

git stash apply 

        删除stash:

git stash drop

        但是我们在开发完成dev2分支的功能后并且提交后,发现我们之前修复的bug内容并没有在dev2上显示,大致示意:

        因为master分⽀⽬前最新的提交,是要领先于新建 dev2 时基于的 master 分⽀的提交的,所以我们在 dev2 中当然看不⻅修复bug的相关代码。我们最好不要直接merge到master上,这样其实是有⼀定⻛险的。解决这个问题的⼀个好的建议就是:最好在⾃⼰的分⽀上合并下 master ,再让 master 去合并dev,这样做的⽬的是有冲突可以在本地分⽀解决并进⾏测试,⽽不影响 master 。 大致的示意图:

删除临时分支分支

        如果我们要删除并没有合并的分支,那么平常使用的git branch -d 是不被允许的,我们可以使用以下的命令:

git branch -D 分支名

        该命令用于强制删除对应名的分支,即使该分支包含未合并的更改。请务必谨慎使用此命令,因为未合并的更改将会永久丢失。

 


                       感谢你耐心的看到这里ღ( ´・ᴗ・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o! 

                                       

                                                                        给个三连再走嘛~  

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

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

相关文章

基于Springboot的高校汉服租赁网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校汉服租赁网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

【清晰易懂】@Mapper注解和BaseMapper爱恨情仇

此问题的提出在于自己没有弄明白一个问题&#xff0c;就是Mapper注解有时候可以不加&#xff0c;有时候又需要加。 先说结论&#xff1a;Mapper注解和BaseMapper类在项目中起着相同的作用&#xff0c;都是为了实现数据库基本简单的CRUD&#xff0c;省去在xml文件中再去写&#…

(一)运行起自己的chatGPT

一、运行步骤 前面所有步骤可以参见https://datawhaler.feishu.cn/docx/BwjzdQPJRonFh8xeiSOcRUI3n8b 二、注意 需要注意的是&#xff1a; 部署起来后&#xff0c;必须使用域名访问才能进入。用ip地址端口访问不成功 三、运行效果 gradio需要额外配置一个外部端口&#x…

Redis + Caffeine = 王炸!!

在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。 随着不断的发展,这一架构也产生了改进,在…

移动硬盘无法读取怎么修复?分享三个简单方法

移动硬盘作为现代数据存储的重要工具&#xff0c;一旦出现故障&#xff0c;往往会让我们感到焦虑和困惑。当移动硬盘无法读取时&#xff0c;我们需要冷静分析并采取适当的措施来修复它。本文将为您介绍三种有效的修复方法。 一、检查物理连接与驱动程序 当移动硬盘无法读取时&…

整数和浮点数在内存中储存的形式

整数 整数的二进制表示法有三种&#xff0c;即原码、反码、补码。 三种表示方式均有符号位和数值位 符号位位于数值位最高位的那一位&#xff0c;分别用0和1表示&#xff0c;0表示正数&#xff0c;1表示负数。 数值位&#xff0c;除最高位的那一位外其他都是数值位。 正整数…

GaussDB(DWS)运维利刃:TopSQL工具解析

在生产环境中&#xff0c;难免会面临查询语句出现异常中断、阻塞时间长等突发问题&#xff0c;如果没能及时记录信息&#xff0c;事后就需要投入更多的人力及时间成本进行问题的定位和解决&#xff0c;有时还无法定位到错误出现的地方。在本期《GaussDB(DWS)运维利刃&#xff1…

Onlyfans年龄验证/无法支付解决方案

很多小伙伴在使用的时候遇到年龄验证&#xff0c;或者需要绑定visa卡&#xff0c;这里需要注意的是提示绑定visa卡直接绑定就好了&#xff0c;记得开好你的环境&#xff0c;要不然也会出现身份验证&#xff0c;对于我们来说验证一般是不过的 1、准备好环境 2、准备好卡&#…

如何使用US Domain Center和WordPress搭建非营利组织网站的详细指南

在今天的数字化时代&#xff0c;拥有一个专业、易于管理和更新的网站对于非营利组织&#xff08;例如慈善机构、NGO等&#xff09;至关重要。WordPress是一个功能强大且易于使用的网站构建平台&#xff0c;而美国域名中心 US Domain Center&#xff1a;US Domain Center 则是一…

iOS应用内的沙盒目录

iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件&#xff0c;在开发中常常需要数据存储的功能&#xff0c;比如存取文件&#xff0c;归档解档等&#xff0c;因此有必要熟悉沙盒目录及其作用。 Documents目录 开发者可以将应用程序的数据文件保存在这个目录下.…

9.15完全平方数

j 算法&#xff1a; 完全平方数就是物品&#xff08;可以无限件使用&#xff09;&#xff0c;凑个正整数n就是背包&#xff0c;问凑满这个背包最少有多少物品&#xff1f; 动规五部曲&#xff1a; 1.确定dp及其下标 dp[j]&#xff1a;凑成j的最少完全平方数的个数为dp[j] …

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的暴力行为检测系统(深度学习模型+UI界面+Python代码+训练数据集)

摘要&#xff1a;本篇博客深入介绍了如何利用深度学习技术构建暴力行为检测系统&#xff0c;并提供了完整的实现代码。本系统基于性能卓越的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等前代算法进行了详细的性能比较&#xff0c;关注了如mAP、F1 Score等关键性能指标。…

数据结构 第2章:线性表

文章目录 2.1 线性表的定义和操作2.1.1 线性表的基本概念2.1.2 线性表的基本操作 2.2. 顺序表2.2.1. 顺序表的基本概念2.2.2. 顺序表的实现2.2.3. 顺序表的基本操作 2.3 链表2.3.1 单链表的基本概念2.3.2 单链表的实现2.3.3 单链表的插入2.3.4. 单链表的删除2.3.5. 单链表的查找…

爬虫入门到精通_框架篇13(PySpider框架基本使用及抓取TripAdvisor实战)_PySpider下载安装,项目实战

1 PySpider框架基本用法 PySpider框架&#xff1a; 去重处理PyQuery提取错误重试多进程处理代理简洁JavaScript渲染结果监控WebUI管理 安装PySpider: pip install pyspider报错&#xff1a; 主要是async是python3.7的保留字&#xff0c;pyspider库中的有些文件与之重复而出…

Stable Diffusion 模型下载:Comic Babes(漫画宝贝)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者datmuttdoe文件名称comicBabes_v2.safet…

教你用两种方式遍历循环python中的字典

开发中经常会用到对于字典、列表等数据的循环遍历&#xff0c;但是python中对于字典的遍历对于很多初学者来讲非常陌生&#xff0c;今天就来讲一下python中字典的循环遍历的两种方式。 注意&#xff1a; python2和python3中&#xff0c;下面两种方法都是通用的。 1. 只对键的…

Python算法题集_搜索旋转排序数组

Python算法题集_搜索旋转排序数组 题33&#xff1a;搜索旋转排序数组1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【二分法区间判断】2) 改进版一【二分找分界标准二分法】3) 改进版二【递归实现二分法】 4. 最优算法5. 相关资源 本文为Pytho…

【libwebrtc】基于m114的构建

libwebrtc A C++ wrapper for binary release, mainly used for flutter-webrtc desktop (windows, linux, embedded).是 基于m114版本的webrtc 最新(20240309 ) 的是m122了。官方给出的构建过程 .gclient 文件 solutions = [{"name" : src,"url

MySQL Connector连接失败之SSL connection error: protocol version mismatch

调用 mysql_real_connect&#xff08;&#xff09; 连接失败&#xff0c;报错为ERROR 2026 (HY000): SSL connection error: protocol version mismatch 调用mysql_error&#xff08;&#xff09;查看失败原因&#xff0c;结果为 SSL connection error: protocol version …

Android APK体积优化指南:清理项目,打造更小的APK、更快的构建速度和更好的开发体验

Android APK体积优化指南&#xff1a;清理项目&#xff0c;打造更小的APK、更快的构建速度和更好的开发体验 在任何软件项目中&#xff0c;开发是一个持续的过程&#xff0c;随着时间的推移&#xff0c;代码库会变得越来越复杂。这种复杂性可能导致构建时间变慢、APK体积变大&…