Git的基本操作(安装Git,创建本地仓库,配置Git,添加、修改、回退、撤销修改、删除文件)

news2025/2/28 0:20:39

文章目录

  • 一、Git安装
  • 二、创建本地仓库
  • 三、配置Git
  • 四、认识工作区、暂存区、本地库
  • 五、添加文件
  • 六、修改文件
  • 七、版本回退
  • 八、撤销修改
    • 1.对于⼯作区的代码,还没有add
    • 2.已经add,但没有commit
    • 3.已经add,并且已经commit
  • 九、删除⽂件


一、Git安装

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

如果你的的平台是centos,安装git相当简单,以我的centos7.6为例:

sudo yum -y install git

我们还可以用下面的指令来查询 git 的版本:

git --verison

二、创建本地仓库

要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库。
创建⼀个 Git 本地仓库对应的命令为:

git init 

注意命令要在⽂件⽬录下执⾏,例如:

在这里插入图片描述

我们发现,当前⽬录下多了⼀个.git 的隐藏⽂件,.git ⽬录是Git来跟踪管理仓库的,不要⼿动修改这个⽬录⾥⾯的⽂件,不然改乱了,就把Git仓库给破坏了。

我们可以看看Git仓库的内容:

在这里插入图片描述

三、配置Git

当安装Git后⾸先要做的事情是设置你的用户名称e-mail地址,这是⾮常重要的。配置命令为:

设置配置
git config [--global] user.name "Your Name"   
git config [--global] user.email "email@example.com"  

删除配置
git config [--global] --unset user.name
git config [--global] --unset user.email

# 把Your Name 改成你的昵称
# 把email@example.com 改成邮箱的格式,只要格式正确即可。

其中--global 是⼀个可选项。如果使⽤了该选项,表⽰这台机器上所有的Git仓库都会使⽤这个配置。如果你希望在不同仓库中使⽤不同的 name 或 e-mail 可以不要--global 选项,注意,执⾏命令时必须要在仓库⾥

我们可以用git config -l来查看配置:

在这里插入图片描述

四、认识工作区、暂存区、本地库

每个 Git 项目的根目录下有一个 .git 目录,它是 Git 默默进行版本控制时读写的“数据库”。下面有几个概念:

  • 工作区:代码所在目录;
  • 暂存区: .git/index 文件
  • 本地仓库: .git 目录;

一个典型的工作流程如下图,绿色部分为工作区(Working Directory),对它进行任何修改(包括:新建文件、删除文件、文件重命名等)都和单纯的修改文件一样,不会涉及到版本控制。

通过新建或粘贴进⽬录的⽂件,并不能称之为向仓库中新增⽂件,⽽只是在⼯作区新增了⽂件。必须要通过使⽤git add 和 git commit 命令才能将⽂件添加到仓库中进⾏管理!!!

在这里插入图片描述

暂存区是一个包含文件索引的目录树.git/index 文件),记录了文件的元数据(文件名、文件长度、修改时间等),而文件内容则存放在 .git/objects 目录下。

用 Git 进行版本控制,实际上就是在工作区、暂存区、本地仓库三个地方进行文件信息的记录。

五、添加文件

我们可以使用git add .将当前⽬录下的所有⽂件改动添加到暂存区,也可以添加指定文件或目录:

添加⼀个或多个⽂件到暂存区:
• git add [file1] [file2] 

添加指定⽬录到暂存区,包括⼦⽬录:
• git add [dir]

此时我们发现objects目录下多了一个文件,而.git目录下也多了一个index目录:

在这里插入图片描述

然后再使用git commit将暂存区的内容添加到本地仓库中:

提交暂存区全部内容到本地仓库中:
git commit -m "message"

提交暂存区的指定内容到仓库区:
git commit [file1] [file2]... -m "message"

注意 git commit 后面的 -m 选项,要跟上描述本次提交的 message,由用户自己完成,
这部分内容绝对不能忽略,并要好好描述,是用来记录你的提交细节,是给程序员看的

在这里插入图片描述

我们可以使用git log 或者git log --pretty=oneline来查看历史提交信息:

在这里插入图片描述

需要说明的是,我们看到的⼀⼤串类似1c43…802的是每次提交的commit id (版本号),Git的commit id 不是1,2,3……递增的数字,⽽是⼀个SHA1计算出来的⼀个⾮常⼤的数字,⽤⼗六进制表示。

接下来我们来看看.git目录的内容:

  1. index 就是我们的暂存区,add后的内容都是添加到这⾥的。
  2. HEAD 就是我们的默认指向master分⽀的指针。
    在这里插入图片描述
    而默认的master分支,其实就是(这里保存了我们第一次提交的commit id):
    在这里插入图片描述
  3. objects 为Git 的对象库,⾥⾯包含了创建的各种版本库对象及内容。当执⾏git add 命令时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的对象中,就位于.git/objects⽬录下,让我们来看看这些对象有何⽤处:
    在这里插入图片描述
    查找objects时要将commit id 分成2部分,其前2位是⽂件夹名称,后38位是⽂件名称。找到这个⽂件之后,⼀般不能直接看到⾥⾯是什么,该类⽂件是使⽤sha(安全哈希算法)加密过的git cat-file 命令来查看版本库对象的内容:
    在这里插入图片描述

这是.git的整体结构:

在这里插入图片描述

六、修改文件

Git ⽐其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,⽽⾮⽂件

什么是修改?⽐如你新增了⼀⾏,这就是⼀个修改,删除了⼀⾏,也是⼀个修改,更改了某些字符,也是⼀个修改,,甚⾄创建⼀个新⽂件,也算⼀个修改。让我们将ReadMe⽂件进⾏⼀次修改:

在这里插入图片描述

此时,仓库中的ReadMe和我们⼯作区的ReadMe是不同的,如何查看当前仓库的状态呢?我们使用git status:

在这里插入图片描述

上⾯的结果告诉我们,ReadMe被修改过了,但还没有完成添加与提交。

⽬前,我们只知道⽂件被修改了,如果能知道具体哪些地⽅被修改了,就更好了。有同学会说,我刚改的我知道呀!可是,你还记得你三天前写了什么代码吗?或者没写?

在这里插入图片描述

git diff [file] 命令⽤来显⽰暂存区和⼯作区⽂件的区别,显⽰的格式正是Unix通⽤的diff 格式。也可以使⽤git diff HEAD -- [file] 命令来查看版本库和⼯作区⽂件的区别。知道了对ReadMe做了什么修改后,再把它提交到本地仓库就放⼼多了。

我们git add 、 commit后,工作区 clean,没有文件需要提交了!

在这里插入图片描述

七、版本回退

执⾏git reset 命令⽤于回退版本,可以指定退回某⼀次提交的版本。要解释⼀下“回退”本质是要将版本库中的内容进⾏回退,⼯作区或暂存区是否回退由命令参数决定

命令语法格式为:git reset  [-soft|-mixed|-hard] [HEAD]

--soft  参数对于⼯作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
--mixed 为默认选项,使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内容,⼯作区⽂件保持不变。
--hard  参数将暂存区与⼯作区都退回到指定版本。切记⼯作区有未提交的代码时不要⽤这个命令,因为⼯作区会回滚,
		你没有提交的代码就再也找不回了,所以使⽤该参数前⼀定要慎重。
		
HEAD 可直接写成commit id,表⽰指定退回的版本

HEAD   表⽰当前版本    HEAD~0 表⽰当前版本
HEAD^  上⼀个版本      HEAD~1 上⼀个版本
HEAD^^ 上上⼀个版本    HEAD~2 上上⼀个版本

我们对ReadMe文件进行3次提交,形成3个版本的ReadMe:

wml@hcss-ecs-e18a testgit]$ vim ReadMe 
[wml@hcss-ecs-e18a testgit]$ git add ReadMe 
[wml@hcss-ecs-e18a testgit]$ git commit -m 'version1'
[master b20581a] version1
 1 file changed, 1 insertion(+)
[wml@hcss-ecs-e18a testgit]$ vim ReadMe 
[wml@hcss-ecs-e18a testgit]$ git add ReadMe 
[wml@hcss-ecs-e18a testgit]$ git commit -m 'version2'
[master f7933bd] version2
 1 file changed, 1 insertion(+)
[wml@hcss-ecs-e18a testgit]$ vim ReadMe 
[wml@hcss-ecs-e18a testgit]$ git add ReadMe 
[wml@hcss-ecs-e18a testgit]$ git commit -m 'version3'
[master 8f06c3b] version3
 1 file changed, 1 insertion(+)

然后我们查看提交记录:

[wml@hcss-ecs-e18a testgit]$ git log --pretty=oneline
8f06c3b610971c0d8ef6694e0b1ca176e0317ef0 version3
f7933bd62a5abac4ac568e26ecbaf36adb279479 version2
b20581a5d7b7e59ba701d7ac878c82f380b55a1e version1
5c455e504433e0d7e2262f8a347a90dd1364e6f8 添加一些数据
1c435239ffe35b1dd3f763d618d9d48acf6b7802 第一次提交

现在,如果我们在提交完version3后,发现version3编写错误,想回退到version2,重新基于version 2 开始编写。由于我们在这⾥希望的是将⼯作区的内容也回退到要⽤到–hard 参数,示例如下:

在这里插入图片描述

如果我们后悔了呢?还能撤销回退到version3吗?如果我们能够找到version3的commit id,那么就可以!如果我们在终端的 git log 中找不到了,我们还能用git reflog来查找最近执行的指令:

在这里插入图片描述

Git 版本回退的速度非常快,,因为Git 在内部有个指向当前分⽀(此处是master)的HEAD指针,refs/heads/master ⽂件⾥保存当前 master 分⽀的最新commit id,当我们在回退版本的时候,Git 仅仅是给refs/heads/master 中存储⼀个特定的version。
在这里插入图片描述

八、撤销修改

1.对于⼯作区的代码,还没有add

例如我们向ReadMe文件中添加几行数据:

[wml@hcss-ecs-e18a testgit]$ cat ReadMe 
aaa
version1
version2
[wml@hcss-ecs-e18a testgit]$ vim ReadMe 
[wml@hcss-ecs-e18a testgit]$ cat ReadMe 
aaa
version1
version2
safasdfasf
agsdgsdg
gasdgasdg
gasdgasdga
adsgasg

我们可以直接删除(效率不高),也可以通过git checkout -- [file]让工作区的文件回到最近一次 addcommit时的状态。

在这里插入图片描述

2.已经add,但没有commit

我们向ReadMe文件中添加几行数据,用git add添加到暂存区:

[wml@hcss-ecs-e18a testgit]$ cat ReadMe 
aaa
version1
version2
[wml@hcss-ecs-e18a testgit]$ vim ReadMe 
[wml@hcss-ecs-e18a testgit]$ cat ReadMe 
aaa
version1
version2
fsdafdafsga
gasdgasdg
adsgagsdgas
gasdgsagas
gdasgasdgas
[wml@hcss-ecs-e18a testgit]$ git add ReadMe //add到缓存区
[wml@hcss-ecs-e18a testgit]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   ReadMe
#

我们的做法如下:

在这里插入图片描述

3.已经add,并且已经commit

我们向ReadMe文件中添加几行数据,用git add添加到暂存区,再用git commit提交到版本库。

[wml@hcss-ecs-e18a testgit]$ cat ReadMe 
aaa
version1
version2
[wml@hcss-ecs-e18a testgit]$ vim ReadMe 
[wml@hcss-ecs-e18a testgit]$ cat ReadMe 
aaa
version1
version2
fsadfsdg
gdasgsd
gadsgdsg
gasdgasdgasgg
[wml@hcss-ecs-e18a testgit]$ git add ReadMe 
[wml@hcss-ecs-e18a testgit]$ git commit ReadMe -m 'first commit'
[master bf00595] first commit
 1 file changed, 4 insertions(+)

我们的做法如下:

在这里插入图片描述

九、删除⽂件

在Git中,删除也是⼀个修改操作,如果我们想删除ReadMe文件:

在这里插入图片描述

此时,⼯作区和版本库就不⼀致了,要删⽂件,⽬前除了要删⼯作区的⽂件,还要清除版本库的⽂件。

走到这,一般有两种情况:误删了或者没删完!

对于误删,用git checkout -- [file]恢复:
在这里插入图片描述

对于没删完,这时就需要使⽤git rm从暂存区和⼯作区中删除,并且commit
在这里插入图片描述

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

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

相关文章

解释区块链技术的应用场景、优势及经典案例

目录 1.区块链应用场景 2.区块链优势 3.区块链经典案例 区块链技术是一种分布式账本技术&#xff0c;它通过加密和安全验证机制&#xff0c;允许网络中的多个参与者之间进行可信的、不可篡改的交易和数据的记录与传输。区块链技术的应用场景广泛&#xff0c;其优势也十分显著…

R语言复现:中国Charls数据库一篇现况调查论文的缺失数据填补方法

编者 在临床研究中&#xff0c;数据缺失是不可避免的&#xff0c;甚至没有缺失&#xff0c;数据的真实性都会受到质疑。 那我们该如何应对缺失的数据&#xff1f;放着不管&#xff1f;还是重新开始?不妨试着对缺失值进行填补&#xff0c;简单又高效。毕竟对于统计师来说&#…

【AcWing】蓝桥杯集训每日一题Day1|二分|差分|503.借教室(C++)

503. 借教室 503. 借教室 - AcWing题库难度&#xff1a;简单时/空限制&#xff1a;1s / 128MB总通过数&#xff1a;8052总尝试数&#xff1a;26311来源&#xff1a;NOIP2012提高组算法标签二分差分 题目内容 在大学期间&#xff0c;经常需要租借教室。 大到院系举办活动&…

Yolov8模型用torch_pruning剪枝

目录 &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680;&#x1f680; 原理 遍历所有分组 高级剪枝器 &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680…

TYPE C模拟耳机POP音产生缘由

关于耳机插拔的POP音问题&#xff0c;小白在之前的文章中讲述过关于3.5mm耳机的POP音产生原因。其实这类插拔问题的POP音不仅仅存在于3.5mm耳机&#xff0c;就连现在主流的Type C模拟耳机的插拔也存在此问题&#xff0c;今天小白就来讲一讲这类耳机产生POP音的缘由。 耳机左右…

计算机视觉——P2PNet基于点估计的人群计数原理与C++模型推理

简介 人群计数是计算机视觉领域的一个核心任务&#xff0c;旨在估算静止图像或视频帧中的行人数量。在过去几十年中&#xff0c;研究人员在这个领域投入了大量的精力&#xff0c;并在提高现有主流基准数据集性能方面取得了显著进展。然而&#xff0c;训练卷积神经网络需要大规…

书与我

和书深深结缘&#xff0c;始于需求&#xff0c;得益于通勤时间长。 读什么书 一直没有停止过编码&#xff0c;工作性质也要求我必须了解很多的新技术&#xff0c;从踏上工作岗位后&#xff0c;就需要不停的看书。从《JAVA编程思想》、《java与模式》、《TCP/IP详解》、《深入…

131.分割回文串

// 定义一个名为Solution的类 class Solution {// 声明一个成员变量&#xff0c;用于存储所有满足条件的字符串子序列划分结果List<List<String>> lists new ArrayList<>(); // 声明一个成员变量&#xff0c;使用LinkedList实现的双端队列&#xff0c;用于临…

Windows下安装pip

一、下载pip 官网地址&#xff1a;https://pypi.org/project/pip/#files 1.1、pip工具查找方法 单击官网首页“PyPi”选项 在弹出来的搜索框中输入“pip” 选择最新的pip版本&#xff0c;点进去 下载pip安装包包 二、安装pip 解压“pip-24.0.tar.gz”&#xff0c;进…

【深度学习笔记】6_5 RNN的pytorch实现

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 6.5 循环神经网络的简洁实现 本节将使用PyTorch来更简洁地实现基于循环神经网络的语言模型。首先&#xff0c;我们读取周杰伦专辑歌词…

b站小土堆pytorch学习记录—— P23-P24 损失函数、反向传播和优化器

文章目录 一、损失函数1.简要介绍2.代码 二、优化器1.简要介绍2.代码 一、损失函数 1.简要介绍 可参考博客&#xff1a; 常见的损失函数总结 损失函数的全面介绍 pytorch学习之十九种损失函数 损失函数&#xff08;Loss Function&#xff09;是用来衡量模型预测输出与实际…

开发指南002-前后端信息交互规范-概述

前后端之间采用restful接口&#xff0c;服务和服务之间使用feign。信息交互遵循如下平台规范&#xff1a; 前端&#xff1a; 建立api目录&#xff0c;按照业务区分建立不同的.js文件&#xff0c;封装对后台的调用操作。其中qlm*.js为平台预制的接口文件&#xff0c;以qlm_user.…

离线数仓(五)【数据仓库建模】

前言 今天开始正式数据仓库的内容了, 前面我们把生产数据 , 数据上传到 HDFS , Kafka 的通道都已经搭建完毕了, 数据也就正式进入数据仓库了, 解下来的数仓建模是重中之重 , 是将来吃饭的家伙 ! 以及 Hive SQL 必须熟练到像喝水一样 ! 第1章 数据仓库概述 1.1 数据仓库概念 数…

【stm32 外部中断】

中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行 中断优先级&#xff1a;当有多个中…

mybatis-plus整合spring boot极速入门

使用mybatis-plus整合spring boot&#xff0c;接下来我来操作一番。 一&#xff0c;创建spring boot工程 勾选下面的选项 紧接着&#xff0c;还有springboot和依赖我们需要选。 这样我们就创建好了我们的spring boot&#xff0c;项目。 简化目录结构&#xff1a; 我们发现&a…

未来城市:探索数字孪生在智慧城市中的实际应用与价值

目录 一、引言 二、数字孪生与智慧城市的融合 三、数字孪生在智慧城市中的实际应用 1、智慧交通管理 2、智慧能源管理 3、智慧建筑管理 4、智慧城市管理 四、数字孪生在智慧城市中的价值 五、挑战与展望 六、结论 一、引言 随着科技的飞速发展&#xff0c;智慧城市已…

R统计学2 - 数据分析入门问题21-40

往期R统计学文章&#xff1a; R统计学1 - 基础操作入门问题1-20 21. 如何对矩阵按行 (列) 作计算&#xff1f; 使用函数 apply() vec 1:20 # 转换为矩阵 mat matrix (vec , ncol4) # [,1] [,2] [,3] [,4] # [1,] 1 6 11 16 # [2,] 2 7 12 17 # [3,] …

前端框架的发展历史介绍

前端框架的发展历史是Web技术进步的一个重要方面。从最初的简单HTML页面到现在的复杂单页应用程序&#xff08;SPA&#xff09;&#xff0c;前端框架和库的发展极大地推动了Web应用程序的构建方式。以下是一些关键的前端框架和库&#xff0c;以及它们的发布年份、创建者和主要特…

UnicodeDecodeError: ‘gbk‘和Error: Command ‘pip install ‘pycocotools>=2.0

今天重新弄YOLOv5的时候发现不能用了&#xff0c;刚开始给我报这个错误 subprocess.CalledProcessError: Command ‘pip install ‘pycocotools&#xff1e;2.0‘‘ returned non-zero exit statu 说这个包安装不了 根据他的指令pip install ‘pycocotools&#xff1e;2.0这个根…

从零开始:神经网络(2)——MP模型

声明&#xff1a;本文章是根据网上资料&#xff0c;加上自己整理和理解而成&#xff0c;仅为记录自己学习的点点滴滴。可能有错误&#xff0c;欢迎大家指正。 神经元相关知识&#xff0c;详见从零开始&#xff1a;神经网络——神经元和梯度下降-CSDN博客 1、什么是M-P 模型 人…