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 即可。

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

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

相关文章

PyTorch神经网络-激励函数

在PyTorch 神经网络当中,使用激励函数处理非线性的问题,普通的神经网络出来的数据一般是线性的关系,但是遇到比较复杂的数据的话,需要激励函数处理一些比较难以处理的问题,非线性结果就是其中的情况之一。 FAQ:为什么要…

【Java 进阶篇】Ajax 实现——JQuery 实现方式 `get` 与 `post`

嗨,亲爱的小白们!欢迎来到这篇关于使用 jQuery 实现 Ajax 请求的博客。在前端开发中,Ajax 是一项非常重要的技术,它使我们能够在不刷新整个页面的情况下与服务器进行数据交互。而在 jQuery 中,get 和 post 方法提供了简…

全流量分析应用运行和访问情况

在当今数字化时代,应用程序的运行和访问情况对于企业和组织来说至关重要。无论是在线销售平台、移动应用还是企业内部系统,应用的性能和可用性直接影响着用户体验、业务流程以及组织效率。因此,对应用的运行和访问情况进行全面分析和评估&…

JZM-D30室温探针台技术参数

概况: JZM-D30室温探针台的诸多设计都是专用的,探针台的配置主要是根据用户的需求进行选配及设计。例如,要求的磁场型号,电源型号,磁场值,样品台的尺寸等,除此之外,该探针台和我司自…

Go 语言中的map和内存泄漏

map在内存中总是会增长;它不会收缩。因此,如果map导致了一些内存问题,你可以尝试不同的选项,比如强制 Go 重新创建map或使用指针。 在 Go 中使用map时,我们需要了解map增长和收缩的一些重要特性。让我们深入探讨这一点…

架构开发与优化咨询和实施服务

服务概述 得益于硬件平台算力的提升,汽车电子电气架构的集成度逐渐提高,从单体ECU、到功能域集成控制器、到区域集成控制器,多域融合成为了目前行业中软件工程的重要工作内容。同时,在传统控制器C代码开发的基础上,C、…

手把手从零开始训练YOLOv8改进项目(官方ultralytics版本)教程

手把手从零开始训练 YOLOv8 改进项目 (Ultralytics版本) 教程,改进 YOLOv8 算法 本文以Windows服务器为例:从零开始使用Windows训练 YOLOv8 算法项目 《芒果 YOLOv8 目标检测算法 改进》 适用于芒果专栏改进 YOLOv8 算法 文章目录 官方 YOLOv8 算法介绍改进网络代码汇总第…

ROS参数服务器(Param):通信模型、Hello World与拓展

参数服务器在ROS中主要用于实现不同节点之间的数据共享。 参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据。 使用场景一般存储一些机器人的固有参数&…

AIGC 技术在淘淘秀场景的探索与实践

本文介绍了AIGC相关领域的爆发式增长,并探讨了淘宝秀秀(AI买家秀)的设计思路和技术方案。文章涵盖了图像生成、仿真形象生成和换背景方案,以及模型流程串联等关键技术。 文章还介绍了淘淘秀的使用流程和遇到的问题及处理方法。最后,文章展望…

安全项目简介

安全项目 基线检查 密码 复杂度有效期 用户访问和身份验证 禁用administrator禁用guest认证失败锁定 安全防护软件操作系统安全配置 关闭自动播放 文件和目录权限端口限制安全审计… 等保测评 是否举办了安全意识培训是否有应急响应预案有无第一负责人 工作内容 测评准备…

【VRTK】【VR开发】【Unity】7-配置交互能力和向量追踪

【前情提要】 目前为止,我们虽然设定了手模型和动画,还能够正确根据输入触发动作,不过还未能与任何物体互动。要互动,需要给手部设定相应的Interactor能力。 【配置Interactor的抓取功能】 在Hierarchy中选中[VRTK_CAMERA_RIGS_SETUP] ➤ Camera Rigs, Tracked Alias ➤ …

Attingo:西部数据部分SSD存在硬件设计制造缺陷

今年5月,西部数据SanDisk Extreme Pro硬盘陆续有用户反馈有故障发生,用户反馈最多的问题是数据丢失和硬件损坏。8月份,因为这个事情,还被爆出,西部数据面临用户的集体诉讼。 近期,有一个专门从事数据恢复的…

高防CDN的需求分析:社会与企业发展的推动力

在当今数字化飞速发展的时代,网络安全成为社会和企业发展的关键因素之一。随着网络攻击手段的不断升级,企业对于高防CDN(内容分发网络)的需求逐渐成为保障业务稳健运行的重要部分。从社会和企业发展的角度来看,高防CDN…

【Java 进阶篇】Ajax 实现——原生JS方式

大家好,欢迎来到这篇关于原生 JavaScript 中使用 Ajax 实现的博客!在前端开发中,我们经常需要与服务器进行数据交互,而 Ajax(Asynchronous JavaScript and XML)是一种用于创建异步请求的技术,它…

Javaweb之Vue生命周期的详细解析

2.4 生命周期 vue的生命周期:指的是vue对象从创建到销毁的过程。vue的生命周期包含8个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法,这些生命周期方法也被称为钩子方法。其完整的生命周期如下图所示: 状…

代码随想录算法训练营第四十九天| 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

文档讲解:代码随想录 视频讲解:代码随想录B站账号 状态:看了视频题解和文章解析后做出来了 123.买卖股票的最佳时机III class Solution:def maxProfit(self, prices: List[int]) -> int:if len(prices) 0:return 0dp [[0] * 5 for _ in…

安装2023最新版PyCharm来开发Python应用程序

安装2023最新版PyCharm来开发Python应用程序 Install the Latest JetBrains PyCharm Community to Develop Python Applications Python 3.12.0最新版已经由其官网python.org发布,这也是2023年底的最新的版本。 0. PyCharm与Python 自从1991年2月20日&#xff0…

【Java】抽象类和接口

文章目录 一、抽象类1.抽象类的概念2.抽象类的语法3.抽象类的特性4.抽象类的作用 二、接口1.接口的概念2.语法规则3.接口的使用4.接口的特性5.实现多个接口6.接口间的继承7.接口的使用实例8.Clonable 接口和深拷贝9.抽象类和接口的区别 三、Object类1.获取对象信息2.对象的比较…

Python基础入门----如何通过conda搭建Python开发环境

文章目录 使用 conda 搭建Python开发环境是非常方便的,它可以帮助你管理Python版本、依赖库、虚拟环境等。以下是一个简单的步骤,演示如何通过 conda 搭建Python开发环境: 安装conda: 如果你还没有安装 conda,首先需要安装Anaconda或Miniconda。Anaconda是一个包含很多数据…