代码时光机:Git基础速成

news2024/11/15 19:34:31

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文件做了什么修改后,再将其提交到本地仓库就放心多了.

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

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

相关文章

Datawhale X 李宏毅苹果书 AI夏令营-深度学习进阶task2:自适应学习率,分类

1.自适应学习率 临界点其实不一定是在训练一个网络的时候会遇到的最大的障碍。很多时候训练网络,损失不再下降,不是因为到了临界点,而是可能在山谷之间不停震荡。 以下为不同学习率对训练的影响,下图中左右平缓,上下陡…

C语言 | Leetcode C语言题解之第387题字符串中的第一个唯一字符

题目&#xff1a; 题解&#xff1a; struct hashTable {int key;int val;UT_hash_handle hh; };int firstUniqChar(char* s) {struct hashTable* position NULL;int que[26][2], left 0, right 0;int n strlen(s);for (int i 0; i < n; i) {int ikey s[i];struct has…

火语言RPA流程组件介绍--浏览选择文件夹

&#x1f6a9;【组件功能】&#xff1a;打开浏览文件夹选择对话框 配置预览 配置说明 对话框标题 支持T或# 打开浏览文件夹对话框时显示的标题。 默认打开文件夹 支持T或# 打开浏览文件夹对话框时&#xff0c;默认打开此文件夹。 取消后终止流程 “是”、“否”2种供选择…

一篇详细介绍常用第三方库的教程

作者&#xff1a;郭震 我们之前介绍过如何安装Python的各种常用第三方库.这些库为程序员提供了许多功能,能够大大简化我们的开发工作.本文将为你介绍一些最常用的第三方库,帮助你更好地理解它们的用途及基本概念. 1. NumPy NumPy是一个强大的科学计算库.它提供了多维数组对象以…

09.定时器02

#include "reg52.h"sbit led P3^6;void delay10ms() { //1. 配置定时器0工作模式位16位计时TMOD 0x01;//2. 给初值&#xff0c;定一个10ms出来TL00x00;TH00xDC;//3. 开始计时TR0 1;TF0 0; } void main() {int cnt 0;led 1;while(1){if(TF0 1)//当爆表的时候&a…

Git之2.9版本重要特性及用法实例(五十八)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者. 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列…

非关系型数据库 Redis 的安装与配置

文章目录 一 . CentOS 7 安装 Redis【版本选择说明】一 . 安装 Redis二 . 配置 Redis2.1 针对可执行程序设置符号链接2.2 针对配置文件设置符号链接2.3 修改配置文件2.3.1 设置 IP 地址2.3.2 关闭保护模式2.3.3 启动守护进程2.3.4 设置工作目录2.3.5 设置日志目录 三 . 启动 Re…

Apache SeaTunnel Zeta 引擎源码解析(一)Server端的初始化

引入 本系列文章是基于 Apache SeaTunnel 2.3.6版本&#xff0c;围绕Zeta引擎给大家介绍其任务是如何从提交到运行的全流程&#xff0c;希望通过这篇文档&#xff0c;对刚刚上手SeaTunnel的朋友提供一些帮助。 我们整体的文章将会分成三篇&#xff0c;从以下方向给大家介绍&am…

掌握数据利器:AWS Glue与数据基盘概览

引言 随着数字化进程的不断推进&#xff0c;企业现在能够积累并分析海量且多样化的数据。这一优势使得许多企业开始采用数据驱动型经营&#xff08;即基于数据的经营策略&#xff09;。通过基于数据的客观判断&#xff0c;企业及其管理者可以获得诸多好处。 然而&#xff0c;…

DeepMind 机器人学习打乒乓球,朝着「专业运动员水平的速度和性能」发展

这几天全球各界最火热的话题非奥运会莫属&#xff0c;而其中乒乓球比赛更是引起了互联网的讨论热潮&#xff0c;无论是欢呼也好、争议也罢&#xff0c;在现实世界人类的乒乓球大赛风生水起的同时&#xff0c;AI已经偷偷在乒乓球上“出师”了—— ——DeepMind近日发布一项新工作…

机器学习 第7章 贝叶斯分类器

目录 7.1 贝叶斯决策论7.2 极大似然估计7.3 朴素贝叶斯分类器7.4 半朴素贝叶斯分类器7.5 贝叶斯网7.5.1 结构7.5.2 学习7.5.3 推断 7.6 EM算法 7.1 贝叶斯决策论 对分类任务来说&#xff0c;在所有相关概率都己知的理想情形下&#xff0c;贝叶斯决策论考虑如何基于这些概率和误…

如何删除浏览器每次登录自动保存的密码,以防自动登录泄露自己的隐私

今天小编以 Microsoft edge 浏览器为例&#xff0c;如何在自己离职或毕业以后留给他人的电脑是干净的&#xff0c;不会在任何网页登录时显示已保存的密码&#xff0c;让他人自动登录。 ①在电脑上打开 Microsoft edge 浏览器后&#xff0c;点击“设置” ②进入设置界面后&…

基于SSM的咖啡馆管理系统

基于SSM的咖啡馆管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisJSP工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台界面 后台界面 摘要 在当前这个信息爆炸的时代&#xff0c;众多行业正经历着…

Python酷库之旅-第三方库Pandas(114)

目录 一、用法精讲 501、pandas.DataFrame.mode方法 501-1、语法 501-2、参数 501-3、功能 501-4、返回值 501-5、说明 501-6、用法 501-6-1、数据准备 501-6-2、代码示例 501-6-3、结果输出 502、pandas.DataFrame.pct_change方法 502-1、语法 502-2、参数 502…

[知识分享]华为铁三角工作法

在通信技术领域&#xff0c;尤其是无线通信和物联网领域&#xff0c;“华为铁三角”是华为公司内部的一种销售、交付和服务一体化的运作模式。这种模式强调的是以客户为中心&#xff0c;通过市场、销售、交付和服务三个关键环节的紧密协作&#xff0c;快速响应客户需求&#xf…

2.12 滑动条事件

目录 实验原理 实验代码 运行结果 实验原理 在 OpenCV 中&#xff0c;滑动条设计的主要目的是在视频播放帧中选择特定帧&#xff0c;而在调节图像参数时也会经常用到。在使用滑动条前&#xff0c;需要给滑动条赋予一个名字&#xff08;通常是一个字符串&#xff09;&#x…

Java | Leetcode Java题解之第388题文件的最长绝对路径

题目&#xff1a; 题解&#xff1a; class Solution {public int lengthLongestPath(String input) {int n input.length();int pos 0;int ans 0;int[] level new int[n 1];while (pos < n) {/* 检测当前文件的深度 */int depth 1;while (pos < n && inpu…

Mamba:超越Transformer的新一代神经网络架构

在过去的七年里&#xff0c;Transformer一直在语言建模领域占据着主导地位。然而&#xff0c;现在有一个新兴的神经网络架构Mamba&#xff0c;正在挑战Transformer的霸主地位。虽然目前Mamba仅在规模较小的模型上进行了测试&#xff08;参数量达到数十亿&#xff09;&#xff0…

华为OD机试真题 - 构成正方形的数量(Java/Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

MySQL密码策略更改(临时+永久)

目录 1、查看数据库当前密码策略 2、查看密码插件&#xff1a; 3、官方文档策略定义 4、更改密码策略 临时修改 &#xff08;1&#xff09;更改密码策略为LOW&#xff0c;改为LOW或0 &#xff08;2&#xff09;更改密码长度 &#xff08;3&#xff09;设置大小写、数字…