一文教你吃透Git工具

news2024/11/13 8:49:17

目录

Git简介

git的安装和配置

新建仓库

工作区域和文件状态

 git reset回退版本

使用git diff比较差异

Git简介

        git是一个免费开源的分布式版本控制系统,它使用一个特殊的叫做仓库的数据库来记录文件的变化,仓库中的每个文件都有一个完整的版本历史记录,可以看到谁在什么时间修改了哪些文件的哪些内容。在需要的时候也可以将文件恢复到之前的某一个版本,如果没有版本控制系统,我们就只能通过最原始的方式来管理文件,原始的方式管理文件-将文件按照日期备份出多个副本,或者将整个项目的每个版本都保存到不同的文件夹中,而当许多项目成员在同时修改同一个项目的时候,就需要手工来合并两个人的内容,这样不但低效,管理起来也比较麻烦,版本控制系统就是为了解决这些问题而诞生的,有了版本控制系统,我们就可以跟踪每个文件的变化,让项目成员之间的协作变得更加高效。

        目前市面上最流行的版本控制系统主要有两种,一种是集中式版本控制系统(SVN,CVS等),一种是分布式版本控制系统(Git、Mercurial等),集中式版本控制系统——所有的文件都保存在中央服务器上,每个人的电脑上都保存了一个副本,当你需要修改文件的时候,首先要从中央服务器上下载最新的版本,然后添加你想要的修改内容,修改完成之后再上传到中央服务器上,集中式版本控制系统的优点是使用起来非常简单,只需要从中央服务器上下载最新的版本,修改完成以后,再上传到中央服务器上就可以了。不需要考虑其他的问题,但是他的缺点也非常明显,就是中央服务器的单点故障问题,如果中央服务器出现故障·,或者网络连接出现问题,那么所有人都无法工作了,只能等待中央服务器或者网络恢复正常,而分布式版本控制系统就没有这个问题,每个人的电脑上都有一个完整的版本库,所以我们可以在本地上进行修改,不需要考虑网络问题,这样即使中央服务器出现故障,我们也可以继续工作,当需要将我们的修改内容分享给其他人时,只需要将仓库互相同步一下就可以了。

 

        因为免费开源,速度快,功能强大,支持离线工作以及强大的分支管理等特性,Git已经成为了世界上最先进放入分布式版本控制系统。世界上超过90%的开源项目都在使用Git进行版本控制。GitHub GitLab Gitee等网站上托管的开源项目也都是使用Git来进行版本管理的,对于开发者来说,掌握Git是必不可少的技能。

git的安装和配置

        首先进行git官网,Git (git-scm.com),  然后点击Downloads

         win+R  ,输入cmd,然后在命令框输入git-v,如果出现下边的版本号,则证明安装成功。

         Git的使用方式,主要有以下三种:

  • 命令行:推荐使用,效率高,理解深
  • 图形化界面:通过一些专用的图像化界面来使用Git
  • IDE插件/扩展: 在常用的IDEA或者VSCode这些IDE中,通过插件或者扩展方式来使用。

为了区别与linux中的命令,则git中所用的命令,都以git开头,后面跟着命令。

        在开始使用git之前,第一步就是使用git config 命令来配置一下用户名和邮箱,这样在提交的时候,才能识别出来谁提交的内容。

git config --global user.name "zhangyu"

local参数:本地配置,只对本地仓库有效

这里global参数:全局配置,所有仓库生效。

system:系统配置,对所有用户生效。(一般不使用)

配置邮箱:如果没有空格,可以不使用 双引号

 git config --global user.email zy507899@163.com

我们可使用下边命令来保存用户名和密码,这样就不需要每次都输入了

git config --global credential.helper

我们可以使用下列命令来查看git配置信息

git config --global --list

 配置完成以后我们就可以用git来管理我们的代码了

新建仓库

        我们可以把仓库理解成一个目录,在这个目录里面所有的文件都可以被Git管理起来,每个文件的修改,删除,添加等操作,Git都可以跟踪到,以便任何时候都可以跟踪历史或者还原到之前的某一个版本。只需要把一个目录变成Git可以管理的仓库就可以了

方式一:一种是在自己电脑本地创建一个仓库。

git init

方式二:从远程服务器上克隆一个已存在的仓库。

git clone

注:我们创建的仓库,是一个隐藏的,ls查看不了,需要ls -a 来查看,我们查看仓库中好多文件,这些文件和目录都是Git仓库中的重要组成部分。不要随意删除和修改,否则会破坏git仓库。这也是为什么要把这个目录隐藏起来的原因。

        使用方式一在本地创建一个仓库

         使用方式二使用git clone命令从Github或者Gitee这种远程服务器上来克隆一个已经存在的仓库。

git clone https://github.com/geekhall-l

工作区域和文件状态

        Git的本地数据管理分为三个区域,分别是工作区(working directory),暂存区(staging Area/Index)和本地仓库(Local Repository),我们在资源管理器里边可以看到的文件夹就是工作区,暂存区是一种临时的存储区域用于保存即将提交到Git仓库的修改内容,暂存区是在Git进行版本控制时非常重要的一个区域,本地仓库就是通过git init命令创建的那个仓库,它包含了完整的项目历史和元数据,是Git存储代码和版本信息的主要位置,简单来说,工作区就是我们实际操作的的目录,暂存区就是一个中间区域,用于临时存放即将提交的修改内容,本地仓库就是Git存储代码和版本信息的主要位置,当你修改完工作区的文件后,需要将他们提交到暂存区,然后再将暂存区的修改提交到本地仓库中。这个过程中我们可以使用Git提供的命令来查看,比较或者撤销修改,来保证版本控制的准确性和完整性。

        我们举一个形象的例子,来说明三个区域之间的关系

        我们可以把仓库理解成工厂里边的仓库,这个仓库里边有许多的货物和产品,这些货物和产品就是我们的文件,比如说我们的代码文件,文本文件,图片文件等等,工作区就是生产这些货物的车间,对我们的货物进行生产、加工和修改,车间生产完这些产品之后需要运送到仓库里边保管起来,那么车间和仓库之间需要一个运输工具,比如我们使用小货车来运输,那么这个小货车里边就是暂存区,车间生产完产品之后,把产品放到小货车上,然后运输到仓库里边保存起来,联系到工作中,当我们的代码完成到一个阶段,需要存档备份的时候,就可以把这个版本放到本地仓库里面保存起来,在版本控制器中,这个保存到仓库的过程就叫做提交,但是,如果我们每次文件修改之后都需要一次提交的话就很麻烦,所以Git给我们提供了一种方式,也就是可以将修改的文件先添加到暂存区中,然后再将所有暂存区的文件统一执行一下提交操作,也就是车间生产完货物之后,并不需要每次都送到仓库里面,而是把这些货物放到小货车上,然后一次性的运送到仓库里面保存起来,相应的git中的文件也存在几种状态,分别是:未跟踪、未修改、已暂存和已提交。

  • git init 创建仓库
  • git status 查看仓库状态
  • git add 添加到暂存区
  • git commit 提交

 ①查看当前仓库的状态,比如可以查看当前仓库处在哪一分支,有哪些文件,并且这些文件当前处在一个怎样的状态。现在我们创建一个zy.txt,里边的内容是“这是我的第一个文件项目”,我们查看他的状态。我们可以看到,文件的状态是未被跟踪的。

 ②我们使用git add 将文件放到小货车里边,也就是暂存区,等待后续的提交操作。并且查看他的状态可知,zy.txt已经变成绿色,状态已经变成 committed.表示已经被添加到暂存区,并且等待提交。

 ③将文件提交到仓库中,使用命令git commit,只会提交暂存区中的文件,不会提交工作区的其他文件。比如我们再创建一个新的文件。git commit 这个命令在提交的时候需要使用-m参数来指定提交的信,这个信息会被记录到仓库中,如果不指定-m这个参数,那么git commit命令会进入中一个交互式的界面,默认会使用vim来编辑信息,提交完成之后,看一下仓库的状态。可以看到刚才绿色的已经不见了。这是因为我们将zy.txt已经提交到仓库里边保管起来了。因为yyq.txt不再暂存区,所以提交时候,不会被提交到仓库里边的。

 ④git add 命令还可以使用通配符来添加多个文件,git *.txt ,将txt结尾的文件名,都保存到赞存区去。可以看到以txt文件结尾的,都已经被添加到赞存区了。而zy.sh文件因为不是以txt结尾,所以没有被添加到暂存区,除了通配符之外,git add命令还可以接受文件夹作为参数,比如,想要添加所有文件的话,可以使用git add .把当前文件夹下的所有文件都添加到暂存区。

 我们可以看到所有文件都被添加到暂存区。

接下来我们vim强大的文本编辑器来提交到仓库,也就是git commit 不加-m参数,vim编辑器中,使用i编辑,使用esc退出,:wq保存并退出。

 ⑤现在仓库中已经有了两次提交,可以使用git log命令来查看提交记录,可以看到我们已经有了两次提交,每次提交都有有个唯一的提交ID,其中git log --oneline可以查看简洁的提交记录。这样只显示每次提交的id和提交的信息。

 git reset回退版本

        我们经常会需要撤销之前的一些修改内容,或者回退到之前的某一个版本,这个时候git reset这个命令就配上用场了,reset命令可以退回到之前的某一个提交的状态,git reset的三种模式,也就是后边可以加上三种不同类型的参数,分别是 git reset --soft、git reset --hard、git reset --mixed。也就是软的、硬的、混合的。soft参数表示回退到某一个版本,并且保留工作区和暂存区中所有修改的内容。hard 参数表示回退到某一个版本,并且丢弃工作区和暂存区中所有修改内容。mixed 这个参数就是介于soft和hard这两个参数之间。回退到某一个版本,并且只保留工作区的修改呢内容,丢弃暂存区的的修改内容。

 首先我们分三次上传文件到暂存区和仓库,其中上传记录如下:

 我们分别复制三次,分别来执行不同的参数,

①我们来看soft参数, 我们执行git reset --soft +回退版本的ID,我们看到提交历史只剩下两次了。再看一下工作区和暂存区的内容,使用ls来查看一下。使用git ls-files来看暂存区的内容,可以知道,到存在,并且看一下仓库状态,提示我们是一个新文件,因为我们使用的是soft参数,所以回退到上一个版本时,工作区和暂存区不会被清空,所以“yyq3.txt”这个文件还是存在的。

 ②同理使用hard参数,我们可以看到暂存区还有工作区都没有‘yyq3.txt’这个文件了

③接下来看一下第三个参数,mixed参数,我们可以看到提交历史也是只有两次,我们看一下工作区中“yyq3.txt”已经不存在,而暂存区中’”。

如果我们不小心误操作,使用hard参数,将暂存区和工作区都删除了,不要担心,因为git中所有的的操作都是可以回溯的,可以使用git reflog来查看历史操作,找到误操作的版本号,然后使用 git reset --hard 版本号,回退到这个版本就可以了。

使用git diff比较差异

        gitdiff后边不加参数,默认比较暂存区和工作区的差异。他会显示发生更改的文件以及更改的详细信息,我们可以看到已经变黄,说明我们修改了一些内容。git会将文件内容使用哈希算法生成一个40位的哈希值。这里只显示了哈希值的前7位,后边的100644,表示的是文件的权限,红色代表删除的内容,绿色是刚刚新加的。

 接下来我们将修改以后的工作区,重新上传到暂存区,再比较差异。可以看到没有任何差异了。

 我们还可以比较工作区和版本库之间的差异,在git diff HEAD

我们还可以比较暂存区和版本库之间的差异 git diff --cached

 

我们也可以比较不同版本ID的差异  使用git diff 版本1 版本2

 

HEAD表示当前版本,HEAD~表示上一版本,HEAD~2表示HEAD之前的两个版本

git diff HEAD~3 HEAD yyq3.txt,表示yyq3.txt当前版本和前三个版本的差异

未完待续~~~

 

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

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

相关文章

windows10 wifi情况下修改静态IP

1.鼠标右击网络选择属性 2.选择更改适配器设置 3.在WLAN,右击选择属性 4. 双击Internet 协议版本4(TCP/IPv4) 5. 启用“使用下面的IP地址” 6.输入目标IP地址,子网掩码,默认网关 我以192.167.1.2为例: 7.cmd中ipconfig查询验证…

【驱动开发day8作业】

作业1&#xff1a; 应用层代码 #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <sys/ioctl.h>int main(int…

P3855 [TJOI2008] Binary Land

[TJOI2008] Binary Land 题目背景 Binary Land是一款任天堂红白机上的经典游戏&#xff0c;讲述的是两只相爱的企鹅Gurin和Malon的故事。两只企鹅在一个封闭的迷宫中&#xff0c;你可以控制他们向上下左右四个方向移动。但是他们的移动有一个奇怪的规则&#xff0c;即如果你按…

【技术讨论】RF环境搭建手册

简要整理下环境搭建的步骤&#xff0c;以便快速、准确的搭建测试环境。 一、环境搭建 一、Python 2.7 1、 不要用Python3.6&#xff0c;很多库3.6中还没有&#xff0c;wxPython官方只支持Python 2。 2、 环境变量配置后需要重启才能生效。 3、 环境变量添加C:\Python27\Sc…

k8s概念-deployment

deployment用于部署无状态应用 Deployment集成了上线部署、滚动升级、创建副本、回滚等功能 Deployment里包含并使用了ReplicaSet Replicaset 通过改变Pod副本数量实现Pod的扩容和缩容 参考文档 https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/ …

go Channel

channel 单纯地将函数并发执行是没有意义的。函数与函数之间需要交换数据才能体现出并发执行函数的意义。 虽然可以使用共享内存进行数据交换&#xff0c;但是共享内存在不同的goroutine中很容易发生竞态问题。为了保证数据交换的准确性&#xff0c;必须使用互斥量对内存进行…

ptyhon——案例五:设定:list=[0,1,2,3,4,5] 列表,翻转列表

案例五&#xff1a;设定&#xff1a;list[0,1,2,3,4,5] 列表&#xff0c;翻转列表def Reverse(lst):return [ele for ele in reversed(lst)] #翻转列表 lst[0,1,2,3,4,5] print(Reverse(lst))

insert into select用法

文章目录 一、insert into select二、insert into select插入失败 本篇文章主要讲解insert into select 的用法&#xff0c;以及insert into select的坑或者注意事项。本篇文章中的sql基于mysql8.0进行讲解 一、insert into select 该语法常用于从另一张表查询数据插入到某表中…

hcip——BGP实验

要求 1.搭建toop 2.地址规划 路由器AS接口地址R11 loop0:1.1.1.1 24 loop1 : 192.168.1.1 24 g0/0/0 12.0.0.1 24 R22 64512 g0/0/0: 12.0.0.2 24 g/0/01: 172.16.0.2 19 g0/0/2: 172.16.96.2 19 R32 64512g0/0/0: 172.16.0.3 19 g0/0/1:1…

【LeetCode】88. 合并两个有序数组

这道题我总共想了三种解法。 1.将nums2中的元素依次放入nums1有效元素的后面&#xff0c;再总体进行排序。 import java.util.*; class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int j 0;for(int i m;i<mn;i){nums1[i] nums2[j];j;}Arrays…

【PostgreSQL】系列之 一 CentOS 7安装PGSQL15版本(一)

目录 一、何为PostgreSQL&#xff1f; 二、PostgreSQL安装 2.1安装依赖 2.2 执行安装 2.3 数据库初始化 2.4 配置环境变量 2.5 创建数据库 2.6 配置远程 2.7 测试远程 三、常用命令 四、用户创建和数据库权限 一、何为PostgreSQL&#xff1f; PostgreSQL是以加州大学…

2023.08.01 驱动开发day8

驱动层 #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_irq.h> #include <linux/interrupt.h> #include <linux/fs.h> #include <linux/gpio.h> #include <linux/of_gpio.h>#…

【从零开始学习JAVA | 三十四篇】IO流

目录 前言&#xff1a; IO流介绍&#xff1a; IO流的常见方法&#xff1a; 1.字节流类&#xff1a; 2.字符流类&#xff1a; 总结&#xff1a; 前言&#xff1a; IO流就是存入和读取数据的解决方案&#xff0c;并且他是一个知识点很多的章节&#xff0c;因此我们关于IO流…

mysql--InnoDB存储引擎--逻辑结构、内存架构、磁盘架构

MySQL进阶篇 文章目录 1、逻辑结构2、架构2、1 内存架构2、2 磁盘架构 1、逻辑结构 InnoDB 逻辑存储单元主要分为&#xff1a;表空间、段、区、页。层级关系如下图&#xff1a; 2、架构 2、1 内存架构 内存架构由四个部分组成&#xff0c;缓存池&#xff08;Buffer Pool&…

Autosar通信入门系列05-聊聊一帧Can/CanFD报文发送时间?

本文框架 1. 概述2. 一帧CAN报文发送时间计算3. 一帧CanFD报文的传输时间计算3.1 标准CAN与CANFD两者间的区别3.2 CANFD报文传输时间计算 1. 概述 本篇我们一起看下一帧Can报文发送需要多长时间&#xff0c;下述文章里我们会首先计算下Can分别对应的字节数&#xff0c;再根据传…

泛微oa 二次开发指南(ecology)

目录标题 一、环境搭建&#xff08;一&#xff09;先下载安装泛微oa&#xff08;ecology&#xff09;&#xff08;二&#xff09;idea环境搭建二、官方文档三、开发规范&#xff08;里面有入门案例&#xff09;四、三方系统调用oa系统接口五、oa系统所有接口文档六、ecology的一…

EAP设备自动化控制:新能源行业智能化生产的重要工具

随着全球对可再生能源需求的不断增长&#xff0c;新能源行业如锂电池和光伏发电等得到了蓬勃发展。为了满足市场需求&#xff0c;新能源行业需要不断提高生产效率、降低生产成本、改善产品质量。在这个过程中&#xff0c;EAP设备自动化控制成为了新能源行业智能化生产的重要工具…

Redis 源码解析之通用双向链表(adlist)

概述 Redis源码中广泛使用 adlist(A generic doubly linked list)&#xff0c;作为一种通用的双向链表&#xff0c;用于简单的数据集合操作。adlist提供了基本的增删改查能力&#xff0c;并支持用户自定义深拷贝、释放和匹配操作来维护数据集合中的泛化数据 value。 adlist 的…

我的4周年创作纪念日

机缘 今天是2023年8月1日&#xff0c;工作四年了&#xff0c;记录博客也四年了。 2019年&#xff0c;我硕士毕业入职到了这家公司&#xff0c;当时培训的资料有一句话说&#xff1a;网络通信100Mbps是串口通信的是串口通信的10倍&#xff0c;我当时就好奇是怎么算出来的&…

springboot整合mybatis分页(使用pagehelper 分页插件)-- 学习若依系统

学习文档&#xff08;参考若依系统&#xff09; 若依的文档&#xff1a;http://doc.ruoyi.vip/ruoyi-vue/document/htsc.html#%E5%88%86%E9%A1%B5%E5%AE%9E%E7%8E%B0 就不从零搭建springboot项目了&#xff0c;直接在自己的项目基础上引入。 1、引入的依赖 <!-- pagehel…