Git的一些基本操作

初始git

我们给出下面的一个场景,在大学里,一些老师在我们做完实验之后喜欢让我们交实验报告,假设我们有一个比较追求完美的老师和一个勤奋的学生,这个学生叫做小帅,那天小帅桑勤奋的完成实验报告,在第二天的时候就去老师办公室教实验报告,但是这个老师一看小帅的实验报告,马上说这个实验报告不行,让你区改一下,这个时候就有我们第一版本的实验报告,然后你去改了好几次,也有好多版本的时候,假设小帅已经写了五个版本的时候,老师说”小帅啊,我看你是个勤奋的学生,是这样的,我看你这个报告还是第二次的最好,你把你第二次改的实验报告拿来就可以了”,因为小帅的实验报告是在每次的基础上改的,所以没有保留之前的版本,这个小帅的心中有一万头草泥马在奔跑,就这样勤奋的小帅被刁钻的老师打败了,这个时候git的作用就可以体现出来了,他就是一个版本控制器,我们可以理解有了它,小帅就能轻松的找出第二个版本的实验报告,因为每一次的实验报告git都会记录下来,但是git可不是仅仅记录实验报告用着,对程序员来说,就是一个可以管理我们源代码的一个重要工具。

为了能够更⽅便我们管理这些不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是能让你 了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和 版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。
⽬前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的⽂件,例如 doc、excel、dwg、 dgn、rvt等等。对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项⽬中的源代码 ⽂件!
 注意事项
还需要再明确⼀点,所有的版本控制系统,Git 也不例外,其实只能跟踪⽂本⽂件的改动,⽐如 TXT ⽂ 件,⽹⻚,所有的程序代码等等。版本控制系统可以告诉你每次的改动,⽐如在第5⾏加了⼀个单词 “Linux”,在第8⾏删了⼀个单词 “Windows”。 ⽽图⽚、视频这些⼆进制⽂件,虽然也能由版本控制系统管理,但没法跟踪⽂件的变化,只能把⼆进 制⽂件每次改动串起来,也就是只知道图⽚从100KB改成了120KB,但到底改了啥,版本控制系统不 知道,也没法知道

git的本质就是一个版本控制器 

git的安装

我们可以先来查询一下我们的云服务器上是否存在git,输入指令

sudo yum -y install git

我们也可以在我们后面输入指令

git --version

来查看我们的版本(后面我演示都是在我自己的本地云服务器上)

[tjl@hecs-67680 ~]$ git --version
git version 1.8.3.1
[tjl@hecs-67680 ~]$ 

这样我们就可以查询我们的版本了。

Linux-ubuntu

如果你的平台是ubuntu我们可以执行下面的指令来安装git

sudo apt-get install git -y

 查询git的版本还是下面的这个条指令

git --version

这样我们的第一步完成了。

创建本地仓库

首先我们需要在本地创建一个目录,因为我们现在知道git是一个版本控制器,所以就应该在一个目录下进行对我们文件进行管理。

创建出目录指令

mkdir gitcode

然后我们进入目录,别忘记进入目录是cd指令

cd gitcode

然后我们在当前目录下输入指令

git init

就可以对我们的仓库进行初始化了。

我们执行指令就可以看到我们下面的结果

[tjl@hecs-67680 gitcode]$ ll -a
total 12
drwxrwxr-x  3 tjl tjl 4096 Feb  5 11:46 .
drwx------ 20 tjl tjl 4096 Feb  4 21:17 ..
drwxrwxr-x  8 tjl tjl 4096 Feb  4 22:34 .git

因为我这里直接创建过东西,所以有一些东西不一样,我把它删了,看到的就是这个东西

先来了解这里.git是一个什么东西,它就是版本库,我们来看看下面的这个图

执行指令tree .git

可以看到这个就是.git版本库里面的东西,我们后面会一个一个讲解,比如这里的Head指针

对象库(objects)还有暂存区(index)这些,现在我们需要做的就是完成一些配置

我们直接执行下面的指令进行配置

git config --global user.name "内容(比如我写的就是姓名缩写)"
gti config --global user.email "最好输入就是你的邮箱,便于管理"

 我们这里如果没有加上--global就不是全局的,最好写成就是加上的,这样所有的地方都有你的记录,在企业中我们的姓名和邮箱这个是很重要的,因为这样就可以看到每次提交人的信息,以便有问题的时候可以找到你。

当然如果我们一开始设置错误的时候,我们也可以进行重置,指令就是

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

注意:我们的指令进行的时候可一定要在我们的仓库下执行,否则没有我用

认识⼯作区、暂存区、版本库

图来

啥是我们的工作区,啥是我们的版本库呢???

首先在我们的仓库下,也就是我们的目录下,除了.git的区域就是我们的工作区,而我们的.git就是版本库了,那他们有是联系吗。

首先就是我们这里就需要来了解一下两条指令

git add [文件名]//将我们工作区的内容提交到暂存区
git commit -m "标签"//将我们的内容提交到版本库中,会有一个HEAD的指针来进行指示

只有在commit之后我们的内容才会真正的进入版本库中了

 

这里需要扩展的一点因为我们的 暂存区其实是一个轻量级的库,所以其实我们一些修改的内容在add的时候是放在对象库中,这里修改的内容是指哪些呢,首先就是新增文件,在文件里添加内容,删除文件,这些操作都会存在对象库中。然后我们的暂存区就会从里面拿出内容add进去。

我们现在我们目录下,也就是工作区创建出一个文件叫做ReadMe,并用vim在里面添加一些文本内容。

[tjl@hecs-67680 gitcode]$ vim ReadMe
[tjl@hecs-67680 gitcode]$ ll
total 4
-rw-rw-r-- 1 tjl tjl 10 Feb  5 12:12 ReadMe
[tjl@hecs-67680 gitcode]$ cat ReadMe 
Hello Git

然后进行git add进行添加到我们的暂存区当中。

git add ReadMe 

那要彻底的放到我们的版本库中的话需要执行的指令就是git commit -m "first add"

执行指令可以看到以下的场景。

[tjl@hecs-67680 gitcode]$ git commit -m "the first add"
[master a6900ba] the first add
 1 file changed, 1 insertion(+), 2 deletions(-)

我们也可以继续用git log来查询我们的提交记录

因为之前提交过内容,所以大家看的这里比较多,但是其实如果大家一开始什么都没提交的话,请情况只有这里的第一条内容,我们这里可以看到每次提交的时间,还有姓名和邮箱,这样就话在企业里也可以对你进行很好的管理。

我们也可以只打印这里的commit ID

[tjl@hecs-67680 gitcode]$ git log --pretty=oneline
a6900ba4258d83df1a8e67c1f4f2ffed32946633 the first add
3e54e85c13b3492b5a27fed80d8e3baa19c247ec the second commit
f9cca32c3296b756ff8fe68371280e1f2bab5828 the first commit

 

需要说明的是,我们看到的⼀⼤串类似 23807c5...56eed6 的是每次提交的 commit id (版本
号),Git 的 commit id 不是1,2,3……递增的数字,⽽是⼀个 SHA1 计算出来的⼀个⾮常⼤的数 字,⽤⼗六进制表⽰(你看到的 commit id 和我的肯定不⼀样,以你⾃⼰的为准)

 因为为了更好的演示后面的一些操作我们这里还需要添加一些文件,大家可以看看我下面的操作,就不讲解没一个操作是怎样的,因为很简单。

[tjl@hecs-67680 gitcode]$ touch test1 test2
[tjl@hecs-67680 gitcode]$ git add test1 test2
[tjl@hecs-67680 gitcode]$ touch test3
[tjl@hecs-67680 gitcode]$ git add test3
[tjl@hecs-67680 gitcode]$ git commit -m "commit test"
[master a9ff80a] commit test
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test1
 create mode 100644 test2
 create mode 100644 test3
[tjl@hecs-67680 gitcode]$ 

再来打开我们.git

现在我们就可以清楚的看到一些变化,首先就是我们的暂存区(index)

1 index 就是我们的暂存区,add 后的内容都是添加到这⾥的。
2. HEAD 就是我们的默认指向 master 分⽀的指针

 我们也可以来看看HEAD下的东西

[tjl@hecs-67680 gitcode]$ cat .git/HEAD
ref: refs/heads/master
[tjl@hecs-67680 gitcode]$ 

然后我们再来进入一个目录

[tjl@hecs-67680 gitcode]$ cat .git/refs/heads/master
a9ff80ab653911ff6127ef4450b04accf52eca4b

下面的这个ID其实就是我们最近一次commit的ID,这个ID就可以来来查看对象中的内容

[tjl@hecs-67680 gitcode]$ git cat-file -p a9ff80ab653911ff6127ef4450b04accf52eca4b
tree d2c1bc8d75fc468be739934ae0d1217eec64ce3b
parent a6900ba4258d83df1a8e67c1f4f2ffed32946633
author tjl <2357850265@qq.com> 1707107089 +0800
committer tjl <2357850265@qq.com> 1707107089 +0800

commit test

这个就是我们的最近一次对这些文件的修改都被记录下来了

总结⼀下,在本地的 git 仓库中,有⼏个⽂件或者⽬录很特殊  

 

index: 暂存区, git add 后会更新该内容。
HEAD: 默认指向 master 分⽀的⼀个指针。
refs/heads/master: ⽂件⾥保存当前 master 分⽀的最新 commit id
objects: 包含了创建的各种版本库对象及内容,可以简单理解为放了 git 维护的所有修改。

 这里继续添加两个指令

git status //来查看上次提交之后在工作区中的内容是否被修改
git diff [文件] //来显示工作区和暂存区的不同

啥意思呢???

就是我们在工作区是可以继续一些操作,比如我们是不是可以创建出文件,也可以在文件中新增内容,但是我们没有进行add操作,这些内容就还是在工作区,我们并没有将修改的对象加载到暂存区,所以就可以用git status 来查看,然后git diff可以更清楚的对比我们到底哪里进行修改,有人就会问,我刚修改的对象我怎么可能忘记呢!假如场景是下面的这个,有一天你写了代码提交了,然后你又改了,改好之后你妈叫你去吃饭了,然后你忘记提交了,三天之后你还记得你改在哪里了吗,所以git diff就可以来帮助我们解决这个问题

版本回退

之前我们也提到过,Git 能够管理⽂件的历史版本,这也是版本控制器重要的能⼒。如果有⼀天你发现 之前前的⼯作做的出现了很⼤的问题,需要在某个特定的历史版本重新开始,这个时候,就需要版本 回退的功能了。

有时候我们可能想找到上一版本的时候我们也可以通过版本回退的操作进行查找,指令就是以下的内容

 git reset [--soft | --mixed | --hard]  commitID

 

看这个图就可以来理解我们使用不同指令进行回退的时候应该加上那个指令

一般不建议加上 --haed,因为这个是把工作区,暂存区,版本库的内容都回退,虽然可以用指令查询到,但是如果commit ID变了的话就不能查询到了,反正建议就是最好不要用,。

 查询以往commitID可以用的指令

git reflog 

今天的内容就到这里,后面会继续更新git的内容!

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于函数接口的认识和学习

1.复习拷贝文件的流程&#xff1a; a.打开文件&#xff1a;fopen b.文件的读写&#xff1a;fgetc/fputc/fgets/fputs c.关闭文件&#xff1a;fclose 注意&#xff1a;全缓存的缓存区大小为4k&#xff0c;所以定义了一个4096字节的char数组。打开两个目标文件和源文件&#xff0…

大厂设计师亲授:PS 中文设置技巧

Photoshop是Adobe开发的图像处理软件&#xff0c;也是市场上最受欢迎的图像处理软件之一。然而&#xff0c;对于一些不熟悉英语的用户来说&#xff0c;Photoshop的默认语言设置可能会成为使用的障碍。那么&#xff0c;如何将Photoshop设置为中文呢&#xff1f;以下是多个角度的…

day21 图像标签、链接标签

文章目录 图像标签链接标签1.文本超链接2.图像超链接3.页面间链接4.锚链接5.功能性链接 图像标签 常见的图像格式 JPGGIFPNGBMP… <img src"path" alt"text" title"text" width"x" height"y"/>src【必填】&#xff…

前端使用pdf.js进行pdf文件预览的第二种方式:Viewer.html

背景 最近需要实现一个PDF文档预览的功能&#xff0c;按理说&#xff0c;如果只是简单的预览&#xff0c;使用<embed>、<object>等就可以实现。 但是&#xff0c;我们的需求要实现搜索&#xff01;而且&#xff0c;文档还都超大&#xff0c;均300页以上。那<e…

###C语言程序设计-----C语言学习(9)#函数基础

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 一. 基础知识的学习 1.函数的定义 函数是一个完成特定工作的独立程序模块&…

Stable Diffusion 模型下载:国风3 GuoFeng3

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十推荐提示词下载地址模型介绍 欢迎使用GuoFeng3模型 - 这是一个中国华丽古风风格模型,也可以说是一个古风游戏角色模型,具有2.5D的质感。 条目内

Tauri:相比Electron,还有很长路要走的。

一、Tauri是什么 Tauri是一个开源的框架&#xff0c;用于构建跨平台的桌面应用程序。它允许开发者使用Web技术&#xff08;如HTML、CSS和JavaScript&#xff09;来构建高性能的本地应用程序&#xff0c;同时提供了访问底层操作系统功能的能力。 Tauri的设计目标是提供一种简单…

js改善轮播图(transform)时内部文本上下闪动问题

前些天绘制轮播图时&#xff0c;发现轮播图中不同span标签内&#xff08;样式不同&#xff09;文字上下跳动。 为了防止眩晕在岗位上&#xff0c;需要对其进行改善&#xff0c;试了很多种方法&#xff0c;最后来总结一下&#xff1a; 我的轮播图template代码片段&#xff1a; …

DBeaver连接人大金仓数据库

人大金仓的驱动 1. 打开DBeaver软件&#xff0c;点击“数据库”&#xff0c;选择“驱动管理器” 2. 点击“新建”进行达人大金仓驱动管理器配置。 3、创建驱动-设置&#xff1a;驱动名称、类名、url 驱动名称&#xff1a;人大金仓&#xff1b; 类名&#xff1a;com.kingbas…

2024美赛数学建模A题思路分析 - 资源可用性和性别比例(2)

# 1 赛题 问题A&#xff1a;资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外&#xff0c;但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1&#xff1a;1&#xff0c;但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。…

UE中对象创建方法示例和类的理解

对象创建方法示例集 创建Actor示例 //创建一个护甲道具 AProp* armor GetWorld()->SpawnActor<AProp>(pos, rotator); 创建Component示例 UCapsuleComponent* CapsuleComponent CreateDefaultSubobject<UCapsuleComponent>(TEXT("CapsuleComponent&qu…

C++多线程学习[六]: 多线程之间的同步

一、同步问题 实际开发场景中有很多需要同步的情况&#xff0c;例如&#xff0c;音频和视频的同步输出、或者通讯能够第一时间同步接受处理… 二、多线程同步demo 可以看到cond可以阻塞等待&#xff08;wait&#xff09;可以通知一个线程(notify_one)也可以通知所有的线程&am…

Mysql的BufferPool

Mysql的BufferPool Mysql是一个存储数据到磁盘的进程&#xff0c;但是磁盘的速度难以与CPU相比&#xff0c;所以InnoDB存储引擎在处理客户端的请求时&#xff0c;当需要访问某个页的数据时&#xff0c;就会把完整的页的数据全部加载到内存中。将整个页加载到内存中后就可以进行…

2 月 5 日算法练习- 字符串

人物相关性分析 思路&#xff1a;枚举前缀和。枚举字符串中的 Bob 位置利用前缀和来记录&#xff0c;然后枚举 Alice 的位置&#xff0c;通过判断 Bob 在 Alice 前面还是后面来进行不同的前缀和差值计算距离 k 距离中 Bob 的个数求和就是答案&#xff0c;复杂度是 On。注意 Bob…

力扣刷题之旅:进阶篇(一)

力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目&#xff0c;以及它们的解题代码。 --点击进入刷题地址 题目1&#xff1a;三数之和 题目描述&#xff1a; 给定一个包含n个…

算法学习——LeetCode力扣哈希表篇1

算法学习——LeetCode力扣哈希表篇1 242. 有效的字母异位词 242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; 描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同…

轻松修复msvcr100.dll丢失的解决方法,修复时需要注意事项

msvcr100.dll文件缺失是一种普遍遇到的电脑问题&#xff0c;此类问题会妨碍一些程序的正常启动或引发其他错误。幸运的是&#xff0c;我们可以采取多种方法修复msvcr100.dll文件。下面将介绍三种常用的解决方法&#xff0c;包括更新电脑系统、使用dll修复工具修复以及手动下载m…

docker安全与https协议

一、docker存在的安全问题 1、docker 自身漏洞 docker 应用本身实现上会有代码缺陷&#xff0c;docker 历史版本共有超过 20 项漏洞 2、docker公有仓库安全问题 docker 提供了 docker hub&#xff0c;可以让用户上传创建的镜像&#xff0c;以便其他用户下载&#xff0c;快速…

Linux内核编译-ARM

步骤一、下载源码及交叉编译器后解压 linux kernel官网 ARM GCC交叉编译器 步骤二、安装软件 sudo apt-get install ncurses-dev sudo apt-get install flex sudo apt-get install bison sudo apt install libgtk2.0-dev libglib2.0-dev libglade2-dev sudo apt install libs…

【Java篇】——浅拷贝or深拷贝

目录 &#x1f6a9;克隆步骤 &#x1f6a9;拷贝 &#x1f388;浅拷贝 &#x1f388;深拷贝 &#x1f6a9;源代码 &#x1f6a9;克隆步骤 Java 中内置了一些很有用的接口 , Clonable 就是其中之一 .【一般接口都是able来设定的&#xff0c;able是可以..的表示一种能力】 …