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

news2024/10/5 22:23:18

 

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

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

                                                                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! 

                                       

                                                                        给个三连再走嘛~  

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

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

相关文章

【SQL】601. 体育馆的人流量(with as 临时表;id减去row_number()思路)

前述 知识点学习&#xff1a; with as 和临时表的使用12、关于临时表和with as子查询部分 题目描述 leetcode题目&#xff1a;601. 体育馆的人流量 思路 关键&#xff1a;如何确定id是连续的三行或更多行记录 方法一&#xff1a; 多次连表&#xff0c;筛选查询方法二&…

Camtasia2024使用问题、功能特点和更新内容等相关信息

作为软件专家&#xff0c;对于市面上各类软件都有较为深入的了解&#xff0c;下面是关于Camtasia2024的使用问题、功能特点和更新内容等相关信息&#xff1a; Camtasia2024win-安装包下载如下: https://wm.makeding.com/iclk/?zoneid56867 Camtasia2024mac-安装包下载如下: …

基于PyTorch深度学习实战入门系列-(3)Numpy基础下

使用mat创建矩阵 a np.mat([[5, 6], [7, 8]]) b np.mat([[1, 2], [3, 4]]) print(a) print(b) print(type(a)) print(type(b))矩阵的加减乘除运算 data1 np.mat([[1, 2], [3, 4], [5, 6]]) data2 np.mat([1, 2]) data3 np.mat([[5, 6], [7, 8]]) print(data1 data2) prin…

【linux线程(一)】什么是线程?怎样操作线程?

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux线程 1. 前言2. 什么是线…

CFINet

文章目录 AbstractIntroductionContributionsRelated Works锚点细化和区域候选小目标检测的特征模拟目标检测的对比学习MethodTowards Better ProposalsLimitations of Cascade RPNCourse-to-fine RPN(CRPN)Loss Function小目标检测的特征模拟范例特征Feat2Embed ModuleLoss …

20240309web前端_第一周作业_豆瓣电影

作业四&#xff1a;豆瓣电影 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0…

地平线旭日x3派部署yolov5--全流程

地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间&#xff0c;安装依赖&#xff1a;3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…

JavaWeb--Maven

一&#xff1a;概述 1.简介 Maven 是专门用于管理和构建 Java 项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构 提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布 …… &#xff09; 提供了一套…

这个学习Python的神仙网站,后悔没早点发现

Python 作为时下最流行的编程语言&#xff0c;很多初学者都将它作为自学编程的首选。不管是有编程经验的开发者&#xff0c;还是新手小白&#xff0c;在这个 AIGC 时代&#xff0c; Python 都可以带你探索新世界。 入门 Python 绝非难事&#xff0c;但如何让自己坚持学下去是如…

图及图的存储

目录 1.图的相关概念 2.图的存储 2.1.直接存法 1.查询是否存在某条边 2.遍历一个点的所有出边 3..遍历整个图 应用 2.2.邻接矩阵 1.查询是否存在某条边 2.遍历一个点的所有出边 3..遍历整个图 应用 2.3.邻接表 1.查询是否存在某条边 2.遍历一个点的所有出边 3..遍…

数据库不应放在容器中?- B站Kubernetes有状态服务实践(Elasticsearch/Clickhouse)

本期作者 前言 云原生时代下&#xff0c; Kubernetes已成为容器技术的事实标准&#xff0c; 使得基础设施领域应用下自动化运维管理与编排成为可能。对于无状态服务而言&#xff0c; 业界早已落地数套成熟且较完美的解决方案。可对于有状态的服务&#xff0c; 方案的复杂度就以…

Spring Cloud Alibaba微服务从入门到进阶(一)

Springboot三板斧 1、加依赖 2、写注解 3、写配置 Spring Boot Actuator Spring Boot Actuator 是 Spring Boot 提供的一系列用于监控和管理应用程序的工具和服务。 SpringBoot导航端点 其中localhost:8080/actuator/health是健康检查端点&#xff0c;加上以下配置&#xf…

关于yolov8文档的记录,补充一些整理的知识点

2023年由Ultralytics 提供了YOLOv8开源项目。YOLOv8 支持全方位的视觉 AI 任务&#xff0c;包括检测、分割、姿态估计、跟踪和分类。这种多功能性使用户能够在各种应用和领域中利用YOLOv8 的功能。安装yolov8开源项目 pip install githttps://github.com/ultralytics/ultralyti…

什么是防静电晶圆隔离膜?一分钟让你了解抗静电晶圆隔离纸

防静电晶圆隔离膜&#xff0c;也被称为防静电蓄积纸、硅片纸、半导体晶圆盒内缓冲垫片等多种名称&#xff0c;是半导体制造和运输过程中的一种重要辅助材料。 该隔离膜具备多种特性&#xff0c;如防静电、无尘、不掉屑、强韧耐用等&#xff0c;这些特性使其在半导体制造和运输中…

YOLOv8改进 | 注意力机制 | 添加YOLO-Face提出的SEAM注意力机制优化物体遮挡检测(附代码 + 修改教程)

一、本文介绍 本文给大家带来的改进机制是由YOLO-Face提出能够改善物体遮挡检测的注意力机制SEAM,SEAM(Spatially Enhanced Attention Module)注意力网络模块旨在补偿被遮挡面部的响应损失,通过增强未遮挡面部的响应来实现这一目标,其希望通过学习遮挡面和未遮挡面之间的…

腾轩科技传媒讲解百度百科词条品牌怎么创建?

品牌百度百科是为企业或个人创建的一个专门展示品牌信息、活动、产品等内容的百度百科页面。通过品牌百度百科&#xff0c;企业可以向用户展示其核心价值、产品特色&#xff0c;提升品牌知名度&#xff0c;并在互联网上建立一个权威的品牌形象。本文腾轩科技传媒讲解百度百科词…

VMware Workstation Pro17 详细安装步骤

VMware Workstation&#xff08;中文名“威睿工作站”&#xff09;是一款功能强大的桌面虚拟计算机软件&#xff0c;提供用户可在单一的桌面上同时运行不同的操作系统&#xff0c;和进行开发、测试 、部署新的应用程序的最佳解决方案。VMware Workstation可在一部实体机器上模拟…

力扣--动态规划/深度优先算法/回溯算法93.复原IP地址

这题主要用了动态规划和回溯算法。 动态规划数组初始化&#xff08;DP数组&#xff09;: 首先&#xff0c;创建一个二维数组dp&#xff0c;用于记录字符串中哪些部分是合法的IP地址。对字符串进行遍历&#xff0c;同时考虑每个可能的IP地址部分&#xff08;每部分由1到3个字符组…

Android中ANR机制

Android中的ANR分为两种&#xff0c;前台ANR和后台ANR。 前台ANR&#xff0c;是指ANR时对用户可感知&#xff0c;比如拥有当前前台可见的activity的进程&#xff0c;或者拥有前台通知的fg-service的进程&#xff0c;这些是用户可感知的场景。前台ANR&#xff0c;会出现一个系统…

岩土工程监测中振弦采集仪的选型指南与市场概况

岩土工程监测中振弦采集仪的选型指南与市场概况 振弦采集仪是岩土工程监测中常用的一种设备&#xff0c;用于测量土体的振动特性。它的选型指南和市场概况如下&#xff1a; 选型指南&#xff1a; 1. 测量参数&#xff1a;振弦采集仪可用于测量土体的振动振幅、频率、相位等参数…