代码时光机:Git基础速成

2024-09-01 15:20
文章标签 基础 代码 git 时光 速成

本文主要是介绍代码时光机:Git基础速成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

hello,家人们,今天咱们来介绍Git以及Git相关的操作,好啦,废话不多讲,开干.

1:Git初识

在介绍Git前,博主首先讲一个小故事.

我们学计算机的小伙伴们,在学校里头都有实验课,那么老师呢就会要求我们写实验报告并且要求我们交上去给老师检查.有一个学计算机的大学生,名字叫张三,然后临近期末了,C语言老师要求学生们做一个课程设计并且写一份课程设计报告出来,这时候张三选择了做一个图书管理系统,然后呢张三用了一周的时间完成了课程设计然后把课程设计报告交给了老师,老师一看,说:张三啊,你这个课程设计完成得还是不错的,但是这个报告呢,写得比较粗糙,你下去再修改下,这个时候张三就听老师的话,下去修改了下,然后过了几天,张三又来找老师了,老师一看,就说:张三啊,你这个比上份那回报告写的好很多了,就是在某个板块上写得怎么说呢,不是很通俗易懂,你下去啊再改改吧,张三听了老师的话,然后下去又改了改,然后过了几天,张三又来找老师,老师一看,就说:张三啊,你这个报告怎么比上回改的还要差了呢而且格式也不对,你下去再改改吧,张三听了老师的话,下去接着改,然后过了几天,张三又去找了老师,老师一看,就说:张三啊,我看你这孩子挺努力的,我也不想再刁难你了,这样吧,你把改的第二版的实验报告给我吧,张三这时候听到这就很懵了,我第二版改的是啥来着,完全不记得了,然后张三就回到了宿舍跟舍友说下了这个事,同宿舍的舍友李四一听这个事就长了个心眼,为了防止之后交实验报告出现跟张三一样的情况,就想着,想着老师也要求自己频繁性地改课设报告的话,那我得提前做好准备,然后李四呢也去交了课设报告,果然,李四也发生了同样的情况,也被老师要求改实验报告,但是李四呢,每次在改实验报告前,都会把实验报告先复制一份留存,然后再去改,就这样子,李四连续被老师要求改了四次,到了第四次交实验报告的时候,老师说:李四啊,我看你这孩子挺聪明的,情商也挺高的,我也不是很想刁难你,这样子吧,你把你第三版的课设报告给我吧,然后李四回到宿舍呢,就直接找到了第三版的实验报告,接着交给了老师.故事到这就结束啦!

从上面的故事回归到我们生活中,在我们学习时,是不是经常会遇到这样子的情况:我们在编写各种文档,为了防止文档丢失,更改出现差错,为了防止出现差错后不能够恢复到原来的版本,这个时候就不得不复制出一个副本,就会出现如下情况

每个版本有各⾃的内容,但最终会只有⼀份报告需要被我们使⽤,但在此之前的⼯作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的⽂件就越来越多,⽂件多不是什么大问题,问题是:随着版本数量的不断增多,你还记得这些版本各⾃都是修改了什么吗?文档会出现这种情况,我们学计算机的在日常写代码中也会出现这种情况.那么如何解决这个问题,这个时候就要提及版本控制器了.

1.1:版本控制器

  • 为了能够更⽅便我们管理这些不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是能让你 了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每改动和 版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。
  • ⽬前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的⽂件,例如 doc、excel、dwgdgn、rvt等等。对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项⽬中的 源代码⽂件
譬如上述故事中的李四,对每一次修改的课设实验报告进行了存档,然后分别命名为了 版本1,版本2,版本3,版本4 .那么李四所做的工作就叫做 版本控制.

PS:所有的版本控制系统,Git 也不例外,其实只能跟踪⽂本⽂件的改动,⽐如 TXT ⽂件,⽹⻚,所有的程序代码等等。版本控制系统可以告诉你每次的改动,⽐如在第5⾏加了⼀个单词 “hello world”,在第8⾏删了⼀个单词 “hello Linux”。

图⽚、视频这些⼆进制⽂件 ,虽然也能由版本控制系统管理,但没法跟踪⽂件的变化,只能把 ⼆进制⽂件 每次改动串起来,也就是只知道图⽚从 100KB改成了120KB ,但到底改了啥,版本控制系统不知道,也没法知道.

1.2:Git安装

Git 是开放源代码的代码托管⼯具,最早是在Linux下开发的.开始也只能应⽤于Linux平台,后⾯慢慢 的被移植到windows下,现如今,Git可以在Linux、Unix、Mac和Windows这⼏⼤平台上正常运⾏了.

1.2.1:Linux-Centos下的安装

如果uu们是在Centos的环境下安装,那么安装Git是相当简单的,这里博主的是以Centos7.9为例的,首先可以输入下面这条命令查看自己是否有安装Git.

git --version
  • 若安装git,则会显示下面的情况

  • 若未安装git,则会显示下面的情况,会友好地告诉你git没有安装

那么输入如下命令就能够安装git了,并且会出现如下的情况

sudo yum install git -y

1.3:Git基本操作

1.3.1:创建git本地仓库

仓库是进⾏版本控制的⼀个⽂件⽬录 我们要想对⽂件进⾏版本控制 ,就必须先创建⼀个仓库出来。
当我们创建好了仓库目录后,此时,我们要创建本地的git仓库的话,则通过 git init命令.
当我们使用git init命令创建好了本地仓库后,我们可以清晰地发现此时当前目录下多了一个.git的隐藏文件,.git目录是Git来跟踪管理仓库, 切记不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库破坏了.

1.3.2:配置git

当我们安装了Git后,那么首先要做的事情就是设置我们的用户名和e-mail地址,这是十分重要

git config "用户名"
git config "email"//查看配置命令
git config -l

有的uu可能在配置用户名或者邮箱的时候,不小心配置错误了,那么这时候我就可以通过git config --unset 命令来删除对应的配置命令.

git config --unset user.name
git config --unset user.email

1.3.2.1:global选项

在Git配置仓库的命令中,global选项是一个可选项.如果使用了该选项,表示这台机器上所有的Git仓库都将会使用相同的配置.若uu们希望在不同的仓库中使用不同的name或者e-mail,可以不用global选项,但是有一点要注意,执行命令时必须要在仓库里.

1.3.2.2:global选项的小细节.

PS:这里有一点要注意,当我们在配置命令时,使用了global选项时,那么在删除对应的配置命令时也要带上global选项.

1.3.3:认识工作区、暂存区、版本库

配置完git后,接下来我们来认识下git中的工作区、暂存区、版本库.

1.3.3.1:工作区

工作区:指的是在电脑上要写的代码或文件的目录.

1.3.3.2:版本库

版本库:又名仓库,英文名叫做repository.工作区有一个隐藏目录.git,它不算工作区,而是Git的版本库.这个版本库里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时候都可以对其追踪历史,或者在将来某个时候可以"还原".

1.3.3.3:暂存区

暂存区:英文名叫stage或index.一般存放在.git目录下的index文件(.git/index)中,我们把暂存区有时也叫做索引(index).

  • 图中的左侧为工作区,右侧为版本库.Git的版本库里存了很多东西,其中最重要的就是暂存区.
  • 在创建Git版本库时,Git会为我们自动创建一个唯一的master分支,以及指向master的一个指针HEAD
  • 当对工作区修改(或新增)的文件执行git add命令时,暂存区目录树的文件索引会被更新.
  • 当执行提交操作git commit时候,master分支会做相应的更新,可以简单地理解为暂存区的目录树才会被真正写到版本库中.

总结:通过新建或粘贴进目录的文件,并不能称之为向仓库中新增文件,而只是在工作区新增了文件,必须要通过git add 和 git commit命令才能将文件添加到仓库中进行管理.

2:添加文件

2.1:场景一

2.1.1:git add命令

我们在包含.git的目录下新建了一个test.c的文件,那么我们可以使用git add命令将文件添加到暂存区里面.

  • 添加一个或多个文件到暂存区: git   add  file1 file2......
  • 添加指定目录到暂存区: git   add  [directory].......
  • 添加当前目录下的所有文件到暂存区: git  add .

2.1.2:git commit命令

将文件添加到暂存区后,接下来我们再使用git commit 命令将暂存区内容添加到本地仓库中

  • 提交暂存区的全部文件到本地仓库中:git commit  -m  "message"
  • 提交暂存区的指定文件到本地仓库中:git commit  [file1] [file2] .... -m "message"

PS:git commit 后面的-m选项,要跟上描述本次提交的message,由用户自己完成,这部分内容不能够省略,并且要好好描述,是用来记录我们的提交细节的,是给人看的.

git commit命令执行成功后会告诉我们,1个文件被改动(就是我们添加了test.c文件),插入了6行内容(test.c文件有6行内容).

2.1.3:git log命令

截止目前为止,我们就已经能够将代码提交至本地仓库了.我们可以使用git log命令,来查看历史的提交记录.

使用该命令显示从最近到最远的提交日志,并且我们可以看到commit时的日志消息

PS:如果嫌输出信息太多,有些眼花缭乱的话,那么我们可以加上 --pretty = online选项.

PS:我们看到的64168e465578281d29f253f4997982a2351e0e9b是每次提交的commit id(版本号),git 的commit id不是1,2,3......递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示.

2.1.3:查看.git文件

2.1.3.1:未添加任何文件的.git文件
2.1.3.2:添加文件后的.git文件

  • index就是暂存区,add后的内容都是添加到这里的.
  • HEAD就是我们的默认指向master分支的指针.

而默认的master分支,其实就是:

打印的64168e465578281d29f253f4997982a2351e0e9b是什么呢,保存的是当前最新的commit id.

objects为Git的对象库,里面包含创建的各种版本库对象以及内容.当执行git add命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,就处在".git/objects"目录下,我们可以来看看这些对象有什么用处.

查找object时要将 commit id分成两部分,前两位是文件夹名称,后38位是文件名称.

找到这个文件后,一般不能直接看到里面是什么,该类文件是经过sha(安全哈希算法)加密过的文件,不过我们可以使用git cat-file 命令来查看版本库对象的内容.

其中,还有一行tree 2c83e5a0998109ba5c2a7efffbc3b4516f814548,我们可以使用同样的方法来进行查看.

再看test.c文件对应的c8aefd1b539379b22f17b2f3664a5c97aad09eb.

这就是我们对test.c文件进行的修改,被git记录了下来.

2.1.4:总结

在本地的git仓库中,有几个文件或者目录很特殊

  • index:暂存区,git add后会更新该内容.
  • HEAD:默认指向master分支的一个指针.
  • ref/heads/master:文件保存当前master分支的最新commit id.
  • objects:包含了创建的各种版本库对象以及内容,简单理解就是放了git维护的所有修改.

2.2:场景二

在之前的学习,我们已经清楚了如何向仓库中添加文件、并且对于工作区、暂存区、版本库也有了一定的认识.那么博主再展示一种添加文件的场景,这样子能够加深对工作区、暂存区、版本库的理解.

当我们提交后发现打印了"1 file changed, 0 insertions(+), 0 deletions(-)",这句话的意思是只有一个文件被修改了,那么有的uu就会有疑问,不是新增了两个文件吗?

我们来简单回亿一下,git add是将文件添加到暂存区,git commit是将暂存区的内容添加到本地仓库中.由于我们并没有使用git add test3.c,那么因此test3.c就不在暂存区中维护,所以我们在commit的时候,其实只是把已经在暂存区中的test2.c提交了,而遗漏了工作区中的test3.c.那么该如何提交test3.c呢,其实很简单滴,只要再次add然后commit即可~

3:修改文件

Git比其他滴版本控制器设计得更加完善,因为Git跟踪并管理的是修改,而非文件.

修改的概念:比如你新增了一行,这就是⼀个修改,删除了一行,也是⼀个修改,更改了某些字符,也是⼀个修改,删了⼀些又加了一些,也是⼀个修改,甚至创建⼀个新文件,也算⼀个修改.

总之:新增,修改,删除都可以被称作修改.

那么接下来我们将对test.c文件进行修改~

此时,仓库中的test.c文件工作区中的test.c文件是不同的,那么该如何查看仓库的状态呢?我们可以通过 git status 命令用于查看上次提交之后是否有对文件进行再次修改.

上面的结果告诉我们,test.c文件被修改过了,但是还没有完成添加与提交.

目前,我们只是知道test.c文件被修改过了,但是,如果我们能知道哪些地方被修改了,就更好了,那么我们可以通过git diff 命令来查看文件的哪些地方被修改了~

git diff [file]命令用来显示暂存区和工作区文件的差异,显示的格式正是Unix通用的diff格式.

PS:也可以使用 git  diff HEAD -- [file]命令来查看版本库和工作区文件的区别.

知道了对test.c文件做了什么修改后,再将其提交到本地仓库就放心多了.

这篇关于代码时光机:Git基础速成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127311

相关文章

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引