代码时光机: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

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

D4代码AC集

贪心问题解决的步骤: (局部贪心能导致全局贪心)    1.确定贪心策略    2.验证贪心策略是否正确 排队接水 #include<bits/stdc++.h>using namespace std;int main(){int w,n,a[32000];cin>>w>>n;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+n+1);int i=1