【Git】版本控制

最近写代码的过程中,因为感觉有的写法不符合项目工程规范,想要给代码瘦瘦身减减肥。但是怕大改动会伤及筋骨,就怕改后跳出什么不知道怎么改出来的BUG。又不能一直回退回退,所以想要给代码来个存档功能,随时随刻能读档。

这时候,Git的版本控制的优势就显而易见
上一次仅仅是将本地仓库和远程仓库联系了起来,没有用到版本控制
Git就是一个分布式版本控制软件,GitHub就是一个Git的托管服务

版本控制的引入

比如你要写代码,在这个项目的基础上(已经有了一个功能A)想要实现一个功能B,你就在原本的文件上增改,突然发现B功能有了,但是A崩了。就很难受,想要时光倒流,拿现在和过去的文件相比做比较。

采取版本控制后,你可以将文件还原到之前的状态,比较各状态之间的细节从而查出是修改了哪个地方,找出哪里出了问题。甚至你可以随意删改项目中的文件,照样可以恢复到之前的样子,因而增加了容错率,提供了更多可能性。

Git在你每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失

Git工作流程

在这里插入图片描述
①我们一般在工作区修改增删文件
②暂存文件,将文件的快照放入暂存区域。对“文件改动”的一种存档
③提交更新,找到暂存区里的文件,将快照永久性存入Git本地仓库

实践演示

1.改动前


这是一开始我的本地文件夹(请不要吐槽,仅做示范用)
其中那个叫做.git的隐藏文件夹,这个就是git仓库,以后所有的git操作历史提交记录信息就全部记录在此了,只要这个文件夹在就可以记住我们的全部git操作,很贴心呢。

在这里插入图片描述
在Github对应的版本号也正是如此,我们叫版本二

改动中

现在我有新的操作,着手进行版本三的开发——增加一个1.txt和删除test.html
所以我进行了以下操作
在这里插入图片描述

git status

查看修改的内容,红字部分说明了我们做了什么改动——删除了test.html,增加了1.txt
新建的1.txt文件出现在Untracked files下,没有被记录,实际上不属于版本三的部分
删除test.html的改动也没有被保存

git add [文件名] 

跟踪文件,添加至暂存区
也可以用 git add . 全部将改动的文件添加至暂存区。此命令会把工作区的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
在这里插入图片描述
此时再运行git status,会看到1.txt文件已被跟踪,处于暂存状态(staged),显示Changes to be committed。

接下来提交更新至本地仓库:先用git status命令确定暂存区域准备妥当,
再运行

git commit -m ”提交信息”(提交信息指本次提交的说明,类似于注释)

接下来查看提交历史

git log

在你执行完初始推送后把代码放到GitHub上。

git push

在这里插入图片描述
在这里插入图片描述
从Github可以看见版本三的提交

在这里插入图片描述
你可能会疑惑,为什么test.html还在github上面?这不是我要的版本三
这个问题问得好!
因为我们没有对其进行add,将这个文件的改动提交到暂存状态(staged)区域。
我们再次回到命令行
在这里插入图片描述
首先我们查看了状态,发现删除test的改动没有被跟踪提交,一般有红字就要注意啦
之后的操作大家应该看得懂,于是乎变成了版本四?这时候github上面的test.html已经失踪了

在这里插入图片描述

3.改动后,版本回退

重点来了,这个版本四不能要了,我想要回来我的版本二!
test.html没了,这是一个很重要的文件,怎么办?

这时候就需要时光倒流(版本回退)
git log命令中我们可以看到一大串黄色像乱码一样的字符,那就是版本号(commit id)我们可以用 git reset命令回退到之前任何一个版本:

借用此篇博客提及的知识点:https://blog.csdn.net/yxlshk/article/details/79944535
重点解释一下这个命令:

git reset

使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向master,而master是指向最新提交)。每个版本都会有自己的版本信息,如特有的版本号、版本名等。如下图,假设只有一个分支:
在这里插入图片描述

git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,如下图所示,假设我们要回退到版本二,且那个版本之后提交的版本我们都不要了,就可以用这种方法。

使用命令回退到版本二:

 git reset --hard [版本号,可以不用写全部,会自动寻找]

在这里插入图片描述
版本回退成功了,此时你会惊讶的发现你的本地文件夹恢复到了版本二当初的样子
1.txt消失了,test.html复活了

在这里插入图片描述
但是github那边还没有改变,如果你想的话,接下来把这个老版本二推过去
于是你使用git push
报错,因为我们本地库HEAD指向的版本比远程库的要旧
在这里插入图片描述
所以我们要用git push -f强制推上去,就可以了

然后Github回到了当初的模样
在这里插入图片描述

某种意义上讲,时光倒流了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值