当前位置: 首页 > news >正文

Git 简介及使用(1)

目录

一、在 Linux 环境中安装 Git

1. 先检查当前服务器中是否有 Git(如果有显示如下图)

 2. 安装Git

 3. 然后重复第一步:查看 Git 的版本信息即可

二、Git 的初始化及配置

  1. 创建目录

  2. 对仓库进行初始化 

  3. 新增两个配置项(git cofig)

三、 Git 的使用

  1. 在仓库中创建一个文件(touch ReadMe)​编辑

 四、Git 场景操作

  1. 分多次 add 和 commit

  2. 查看修改的是哪一个文件(显示暂存区和工作区文件的差异)

  3. 查看文件修改的内容 

  4. Git 的版本回退 (reset)

  5. 撤销工作区的文件到上一个版本(chechout)

  6. 删除文件


前言

    假设有这样一个场景,老板让员工做一个档案,员工这个档案做好了之后交给老板看,此时老板不满意,又让回去改,改完给老板看,但是老板又不是很满意,就这样改了又改,给老板看过之后,老板此时说第一版是最符合预期的,这个时候员工就..........

    然后就演化出了 Git(就是一个很主流的版本控制器),简单来说它就是一个文件版本管理系统,可以记录各种文件的版本信息,就像上述的设计文档,改过一次就是一个版本,这样就产生了很多个版本,那这个版本维护的工作其实是很困难的,那如何才能清楚的记录每一个版本的改动的信息呢,这个时候 Git 就出现了。它可以帮助我们做一个版本的维护,而且不仅仅局限于文档的形式,它可以维护各种文件,包括二进制文件。

    对于开发人员来说,最重要的就是可以管理项目中的源代码文档,对于文本文件来说,如下图所示:

     可以很清晰的看到新增的信息,但是 Git 不仅仅文本,还有二进制文件(图片,视频),对于这种文件 Git 无法知道而每个版本修改的内容是什么,如图片,原来是 100Kb 大小的图片,现在变成 200Kb,这个 Git 是可以知道的。

一、在 Linux 环境中安装 Git

1. 先检查当前服务器中是否有 Git(如果有显示如下图)

 2. 安装Git

 3. 然后重复第一步:查看 Git 的版本信息即可

二、Git 的初始化及配置

  1. 创建目录

    首先在 Git 中存储各种版本的各种文件时,也不是直接就可以将修改过的文件放在服务器的任意位置的,此时 Git 是无法进行追踪管理的,所以要使用 Git 存储一些文件时,需要把文件存放在 Git 仓库中,这个仓库是在目录中创建的,所以首先要创建一个目录: 

  2. 对仓库进行初始化 

     之后需要进行初始化(git init),之后用 tree 命令,这个.git/ 就是追踪管理我们的仓库的,但是不要修改这个文件中的内容,就可以看到这个仓库中有各种初始化的文件了:

   3. 新增两个配置项(git cofig)

    第一个配置项就是 name,第二个就是 Email,如果不进行这两个配置项,以后再使用 Git 管理文件的时候就会出错,配置如下:

    git config user.name "用户名"

    git config user.email "邮箱地址"

    git config -l (列出git中的配置项有哪些)

        (还可以对配置项进行删除)(git config --unset 要删除的配置项

     通过上述命令就可以对 git 的配置文件进行简单的操作了,还有一个重要的配置项:

    (git config --global

     在一台服务器中,可以创建很多个本地仓库,上述 加了 --gloabl 参数的目的就说明在当前服务器的所有仓库这个配置都是生效的,可以看到上图中执行结果,但是如果要删除这个配置选项,刚才的删除方式就不可行了,如下图:

    可以看到,如果配置的是全局配置项,在删除的时候也需要加上 --gloabl 这个参数。

三、 Git 的使用

  1. 在仓库中创建一个文件(touch ReadMe)

     但是这个ReadMe 文件也是不能托管给 Git 管理的,因为只有 .git 文件才是版本库,但是也不能 cd 到 .git 创建一个文件,上述已经说过,.git 文件是不能做出任何修改的,否则本地仓库就不能使用了,所以只能将 ReadMe 文件写在 gitcide 目录下,.git 就是版本库,此时 ReadMe 文件所在的就是工作区,此时有了 版本库(对应着上图中.git文件的树状结构)和工作区两个概念,如下图:

    左半部分就对应着工作区(ReadMe文件),右边就是版本库,其中有两个区域,stage(暂存区 / 索引),master(分支),如果要将各种文件托管给 Git,就需要上图的流程:

1. 将工作区中的修改(修改包含:新增 / 删除 / 修改)的内容 add 到版本库中的 暂存区(stage)
2. 将 暂存区的文件 commit 到 master 分支,在 master 中的文件才能真正的被管理维护。(master 分支才算是真正意义的本地仓库)

     那是如何做到对文件的版本信息的维护呢?  在版本库中其实还维护着一个对象库(objects)

    这个里面存储的就是一个个的 Git 对象,当工作区的文件修改之后,会将修改i的内容存储其中的一个 Git 对象中,Git 对象会被维护到 Git 对象库中,每 add 一次,这个对象库中就会存一份修改的内容,这个 stage(暂存区)存储的就是一个个修改后的对象的索引,所以暂存区也是很轻量的,没有存储很多的对象。

    commit 操作就是将暂存区的这个树状结构写到 master 分支下,这个分支存储的也不是 Git 对象,存储的也是一个目录树,这个树中存储的也是 Git 对象库的索引。

    上图中还有一个 Head,它就是一个指针,有了 Head就可以拿到master分支中的索引,之后就可以拿到每一次修改的文件内容。

    通过上述的种种流程,就是 Git 如何来管理维护一个文件。可以通过下图来对照看:

 四、Git 场景操作

  1. 分多次 add 和 commit

    如上图所示:如果在 add 其中一个文件之后,又创建了一个文件,没有 add 之前是不能进行 commit 的,但是可以分多次 add,分多次 进行 commit。 

  2. 查看修改的是哪一个文件(显示暂存区和工作区文件的差异)

    (git status

   3. 查看文件修改的内容 

    (git diff ReadMe

   4. Git 的版本回退 (reset)

    (git reset [-- soft  |  --mixed  |  --hard]  [HEAD]

    版本回退本质就是上述老板让做的设计文档,改了又改之后,老板决定要第一个版本,此时如果将文档交给 Git 后,Git 也是有这个能力还原出第一个版本的,如下图所示:

     Git 的版本回退一般都会在版本库中回退,如果要在工作区和暂存区也回退,需要设置上述命令的参数。

  --soft :只会在版本库中回退

  --mixed : 会在暂存区和版本库中都会回退
  --hard : 工作区,暂存区,版本库中全部回退(慎用!)

     可以以 --hard 参数为例,可以先打印一下看 gitCode 目录中有哪些文件:

    如上图所示;就使用 --hard 参数回退到第一次提交的 ReadMe 文件(只有hello git),使用

git reset --hard [ID] 命令进行回退: 

    上图执行结果中就只有 ReadMe 一个文件了,其实现在再回退回去也是可以的可以用下边这个命令: git refflog ,来查看 Git 中的每一次操作,我们可以看到如下图所示:

    然后再使用 reset 命令:git reset --hard [ID],之后就又回退到原来的版本了。这个回退的前提就是需要找到某一次的 commit ID,但是在开发的时候可能会 commit 很多次操作,此时是不太容易找到 commit ID(就是一个 Git 对象)的,所以 --hard 参数要慎用。

    版本回退这个操作是很快很轻量的,因为在回退的时候本质上就是将 master 中的指针进行修改,如下图所示:

  5. 撤销工作区的文件到上一个版本(chechout)

    (git checkout --) 

    有了版本回退操作之后,为啥还要有这个,如果写了很多代码,但是发现写的代码质量很差,此时就想将新写的代码进行删除操作,如果要进行手动删除,这个操作很耗时,所以要将工作区的文件回退到上一个版本,就可以使用 checkout 命令来撤销。

    如上图所示:存在工作区中的修改后的文件,如果要撤销到上一个版本,使用以下命令:
git checkout -- [filename],(注意 -- 两边都是有空格的,而且必须加上 -- 和文件名,否则 checkout 是另一个含义)如在 ReadMe 文件中新增内容: 

    此时修改后的 ReadMe 文件只存在于工作区中,但是现在想要回退到上一个版本,可以使用下图命令:

    上个表格中的第二种第三种情况都是可以使用 reset 命令来进行撤销操作的,但是需要注意以下两点:

(1)撤销和版本回退的区别:版本回退都是回退到某个 commit,修改的是 master 分支中的指针的指向,不会改变提交历史记录,但是撤销主要是帮助我们修复错误,并回到之前的状态。

(2)上述撤销操作都是在 本地仓库中的代码文件没有推送到远程仓库中之前,才可以进行撤销。

  6. 删除文件

    删除Git 中的文件有两种方式:

(1)rm [filename]     

         git add [filename]       

         git commit -m "细节描述"

(2)git rm file [filename]             

         git commit -m "细节描述"

    第一种方式分三个步骤,先删除文件,但是这一步只是将工作区中的文件进行了删除,暂存区和版本库中的文件并没有被删除,所以还要进行 add 和 commit。

    第二种方式只需两个步骤:git rm 这个命令做了两个工作,第一步就是将工作区和暂存区的文件都进行了删除,但是版本库中的文件还是存在的,所以还需要进行 commit 即可。

相关文章:

Git 简介及使用(1)

目录 一、在 Linux 环境中安装 Git 1. 先检查当前服务器中是否有 Git(如果有显示如下图) 2. 安装Git 3. 然后重复第一步:查看 Git 的版本信息即可 二、Git 的初始化及配置 1. 创建目录 2. 对仓库进行初始化 3. 新增两个配置项&#xff08…...

HTTPS流量抓包分析中出现无法加载key

HTTPS流量抓包分析(TLSv1.2),这篇文章分析的比较透彻,就不班门弄斧了 https://zhuanlan.zhihu.com/p/635420027 写个小问题:RSA密钥对话框加载rsa key文件的时候注意不要在中文目录下,否则会提示:“Enter the passwor…...

学习Rust适合写什么练手项目?【云驻共创】

Rust是一门备受关注的系统级编程语言,因其出色的内存安全性、高性能和并发性能而备受赞誉。对于那些希望学习和掌握Rust编程语言的人来说,练手项目是一个不可或缺的环节。通过实际动手完成项目,你可以加深对Rust语言特性和最佳实践的理解&…...

Spring Cloud学习(九)【Elasticsearch 分布式搜索引擎01】

文章目录 初识 elasticsearch了解 ES倒排索引ES 的一些概念安装es、kibana安装elasticsearch部署kibana 分词器安装IK分词器ik分词器-拓展词库 索引库操作mapping 映射属性索引库的 CRUD 文档操作添加文档查看、删除文档修改文档Dynamic Mapping RestClient 操作索引库什么是Re…...

jvm 内存结构 ^_^

1. 程序计数器 2. 虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区 程序计数器 定义: Program Counter Register 程序计数器(寄存器) 作用,是记住下一条jvm指令的执行地址 特点: 是线程私有的 不会存在内存溢出 虚拟机栈…...

SQL基础理论篇(八):视图

文章目录 简介创建视图修改视图删除视图总结参考文献 简介 视图,即VIEW,是SQL中的一个重要概念,它其实是一种虚拟表(非实体数据表,本身不存储数据)。 视图类似于编程中的函数,也可以理解成是一个访问数据的接口。 从…...

element-ui中怎样使用iconfont的图标

1 登录 https://www.iconfont.cn/ 2 搜索合适的图 这里可以找到这个图所在的图库。这样就可以一次查找到对应的所有同款图标 3 选择同款加入购物车 4 将购物车的icon加入项目,注意是新建项目,除非你是确定需要前面已经加过的icon 5 下载icon 选择fon…...

记一次struct2漏洞获取服务器

文章目录 一、漏洞原因二、漏洞成果三、漏洞利用0x01 struts2漏洞获取shell0x02 todesk配置文件获取连接0x03 orcal数据库连接0x04 web网站 sso管理权限0x05 tomcat网站0x06 获取路由器权限0x07 远程桌面四、总结五、免责声明一、漏洞原因 由于网站使用struct2框架,未及时进行…...

ChatGPT API 学习

参考:从零开始的 ChatGPT API 使用指南,只需三步! - 知乎 (zhihu.com) ChatGPT API 是一种由 OpenAI 提供的 API,它可以用最简单的方式把 ChatGPT 的聊天能力接入到各种应用程序或服务中。 自然语言语音识别(Natural Language S…...

nginx中将指定文件夹设置为虚拟目录

记得目录后面要加个斜杠“/"。 话说,我们系统有照相机和摄像头,可以产生照片和视频。通过nginx将照片和视频所在文件夹映射为虚拟目录,外部即可访问。 如何映射(或曰,转发)呢?这样写&…...

78基于matlab的BiLSTM分类算法,输出迭代曲线,测试集和训练集分类结果和混淆矩阵

基于matlab的BiLSTM分类算法,输出迭代曲线,测试集和训练集分类结果和混淆矩阵,程序有详细注释,数据可更换自己的,程序已调通,可直接运行。...

苹果MAC安装绿盾出现问题,安装时没有出现填服务器地址的页面,现在更改不了也卸载不了绿盾 怎么处理?

环境: Mac mini M1 Mac os 11.0 绿盾v6.5 问题描述: 苹果MAC安装绿盾出现问题,安装时没有出现填服务器地址的页面,现在更改不了也卸载不了绿盾 怎么处理? 解决方案: 大部分企业是Windows和Mac终端混合使用,在进行文档加密管理时通常会遇到不兼容的现象,而为了统一…...

MySQL优化-查询优化

MySQL查询优化是指通过调整查询语句、优化表结构、使用索引等方式,提高查询性能的过程。以下是MySQL查询优化的几种方法: 1. 尽量避免使用SELECT* SELECT *会查询表中的所有列,包括不需要的列,这会消耗大量的计算资源和时间。而…...

Ubuntu18.04安装Moveit框架

简介 Moveit是一个由一系列移动操作的功能包组成的集成化开发平台,提供友好的GUI,是目前ROS社区中使用度排名前三的功能包,Moveit包含以下三大核心功能,并集成了大量的优秀算法接口: 运动学:KDL,Trac-IK,IKFast...路径规划:OMPL,CHMOP,SBPL..碰撞检测:FCL,PCD... 一、更新功…...

MongoDB——文档增删改查命令使用

MongoDB 文档增删改查 命令操作描述db.collection.insert() db.collection.insert()将单个文档或多个文档插入到集合中db.collection.insertOne()插入文档,3.2 版中的新功能db.collection.insertMany()插入多个文档,3.2 版中的新功能db.collection.update更新或替…...

【日常总结】Swagger-ui 导入 showdoc (优雅升级Swagger 2 升至 3.0)

一、场景 环境: 二、存在问题 三、解决方案 四、实战 - Swagger 2 升至 3.0 (Open API 3.0) Stage 1:引入Maven依赖 Stage 2:Swagger 配置类 Stage 3:访问 Swagger 3.0 Stage 4:获取 js…...

OpenCV C++ 图像 批处理 (批量调整尺寸、批量重命名)

文章目录 图像 批处理(调整尺寸、重命名)图像 批处理(调整尺寸、重命名) 拿着棋盘格,对着相机变换不同的方角度,采集十张以上(以10~20张为宜);或者棋盘格放到桌上,拿着相机从不同角度一通拍摄。 以棋盘格,第一个内焦点为坐标原点,便于计算世界坐标系下三维坐标; …...

RT-DETR手把手教程,注意力机制如何添加在网络的不同位置进行创新优化

💡💡💡本文独家改进:本文首先复现了将EMA引入到RT-DETR中,并跟不同模块进行结合创新;1)Rep C3结合;2)直接作为注意力机制放在网络不同位置;3)高效…...

qt treeview 删除节点

Qt 中,要删除 QTreeView 中的节点,可以通过操作其模型(QAbstractItemModel)来实现。以下是一个简单的示例,展示如何从 QTreeView 中删除节点。 假设你有一个 QTreeView,它使用了 QStandardItemModel 作为模…...

【单词】【2019】

...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

生成 Git SSH 证书

🔑 1. ​​生成 SSH 密钥对​​ 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​: -t rsa&#x…...

Java入门学习详细版(一)

大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

C++ 设计模式 《小明的奶茶加料风波》

👨‍🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

Unity中的transform.up

2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...