02 - Git 之命令 +

1 Git相关概念

1.1

以下所谈三个区,文件并不只是简单地在三个区转移,而是以复制副本的方式转移

在这里插入图片描述

使用 Git 管理的项目,拥有三个区域,分别是

  • Working area工作区(亦称为 工作树Working Tree)、
  • stage area 暂存区(亦称为 index 索引)、
  • Git 仓库

对应地,Git 中的文件有三种状态

  • modified 已修改 :若工作区的文件被修改了,但还没有放到暂存区,就是 modified 状态。
  • staged 已暂存 :若被修改的文件已经从工作区到了暂存区,就是 staged 状态,因此我们也可以说,文件处于暂存区 = 文件是 staged 状态。此外,Git 会为 staged 状态的文件打上标记,以使其包含在下次 commit 的列表中
  • committed 已提交 :表示文件已经 “复制一份” 到了本地 Git 仓库中

1.2 HEAD、工作树Working Tree、分支Branch、索引

Working Tree :实际就是 working area

Branch:branch可以有多个,其本质上是一个指向 commit 对象的可变指针

HEAD:HEAD只能有一个,其本质上是一个指向 正在工作中的本地 branch 的可变指针

简单来讲,就是你现在在哪儿,HEAD 就指向哪儿

更具体来说:HEAD指针指向我们所在的 branch,当我们在某个 branch 上创建新的 commit 时,branch 指针总是会指向当前 branch 的最新 commit

所以,HEAD指针 ——–> branch 指针 ——–> 最新 commit

例如当前我们处于 master 分支,所以HEAD这个指针指向了master分支指针
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2. 命令

2.1 add 命令

add是个多功能的命令,主要有如下 3 个功效:

① 可以用它开始跟踪新文件,并放到暂存区

② 把已跟踪的、且已修改的文件放到暂存区

③ 把有冲突的文件标记为已解决状态

此外,当存在多个文件需要添加到暂存区时是,采用

git add . 

git commit 默认会将暂存区所有文件一并 commit

2.2 commit

Git 标准的工作流程是工作区 → 暂存区 → Git 仓库,但有时候这么做略显繁琐,此时可以跳过暂存区,直接将工作区中的修改提交到 Git 仓库,这时候 Git 工作的流程简化为了工作区 → Git 仓库

Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

git commit -a -m "日志信息"

2.3 status

git status 命令无法直接显示 committed 文件的状态,它主要关注的是当前工作目录和staging area 中文件的状态。

当执行 git status 时,会显示以下信息:

  1. 已修改但未 add 到 staging zone 的文件
  2. 已 add 到staged zone 但未 commit 到 Git 仓库的文件
  3. untracked 文件(即不在版本控制下的新文件)

对于已经 commit 的文件,如果它们没有新的未 commit 的改动,git status 将不会报告它们的存在,因为它默认那些文件干净的。

2.8 log和reflog

git log    //查看所有版本记录
#显示内容过多会自动进入多屏显示控制方式:空格向下翻页 、b 向上翻页 、q 退出

在这里插入图片描述

git log --pretty=oneline  //每个历史压缩到一行内显示,此时只显示 hash 值和备注

git log --oneline   //与上面的区别是 hash 值只显示一部分

在这里插入图片描述

git reflog   //显示历史只显示一行,并且显示指针(要移动到版本多少步)

在这里插入图片描述

2.9 reset【跳转 】到指定的版本

HEAD: 这是一个指针,用以标记历史版本

( 1 )
基于【部分hash值】跳转[推荐],可以前进或后退

这个部分hash值,就是 git log --oneline 得到的。

#语法 git reset --hard [部分hash值]
#回退到第一个状态,即创建的状态
git reset --hard 699513b

( 2 )
使用^符号,只能后退

#一个^表示后退一步,n 个^表示后退 n 步
git reset --hard HEAD^^  

( 3 )
使用~符号,只能后退

#表示后退 n 步
git reset --hard HEAD~n

git reset --hard HEAD~3  //表示后退3步
# 在一行上展示所有的提交历史,以获取指定版本的版本号
git log --pretty=oneline

# 使用 git reset --hard 命令,根据指定的提交 ID 回退到指定版本
git reset --hard <CommitID>

# 在旧版本中使用 git reflog --pretty=oneline 命令,查看命令操作的历史
git reflog --pretty=onelone

# 再次根据最新的提交 ID,跳转到最新的版本
git reset --hard <CommitID>

在这里插入图片描述

2.10 reset 命令的三个参数对比

①–soft 参数

一句话:仅仅在本地库移动 HEAD 指针

–soft 是最轻的重置模式,它只重置分支指针,不会修改工作区和暂存区。
使用 --soft 时,Git 会将当前分支指向指定的提交,但是不会删除任何修改,工作区和暂存区的修改都会保留。

实际应用场景:
修改 commit 信息:commit的代码是正确的,但是想修改 commit 附带的信息,可以使用 git reset --soft HEAD^ 命令来重置分支指针,并修改提交信息,然后重新提交,因为工作区和暂存区还是最新的代码。

合并 commit:之前的 commit 都是正确的,每次 commit 一句诗,依次 commit 了四次,这种情况下,工作区、暂存区、Git 仓库都是4句诗。但是,我们想合并四次 commit 为一次。由于工作区和暂存区都保存了正确的四句诗,我们用 --soft 将 Git仓库回退到0句诗,再 commit 一次暂存区,这样,就将四句诗合并到一次 commit 了。

②–mixed 参数

一句话:不仅在本地库移动 HEAD 指针,还同步暂存区为与 HEAD 一致,但工作区不做处理

–mixed 是默认的重置模式,它既不会删除修改,也不会修改提交信息。使用 --mixed 模式时,Git 会将当前分支指向指定的 commit,并将暂存区同步为指定的 commit,但是工作区的修改不会被删除。

实际应用场景:
**取消暂存区的修改:**如果你不小心将修改添加到了暂存区,可以使用 git reset HEAD 命令将指定文件的修改从暂存区移除,然后重新add + commit 。此时,该命令与git restore --staged 作用类似
举例来说,Git 仓库中有1,2 号诗,工作区错误写成了 1,2,4号诗,并且还 add 到了暂存区。此时,mixed 模式将Git 仓库和工作区回退到2号阶段(Git本来就是 2 号,因此不发生改变),然后再将工作区改为1,2,3号并 add commit,这样,最终工作区、暂存区、Git 仓库都同步为了正确的1,2,3

撤销部分 commit:如果你只想撤销部分 commit ,可以使用 git reset --mixed HEAD~n 命令将最近的 n 次 commit reset 为指定commit,然后手动 add 需要保留的修改到暂存区,最后 commit。

③–hard 参数

**一句话:**对 Git 仓库、暂存区、工作区进行的统一回退

详细解释:
–hard 会完全撤销提交并删除所有的修改。使用 --hard 时,Git 会将当前分支指向指定的提交,并删除所有的修改,包括工作区和暂存区的修改。这意味着,使用 --hard 时,所有未提交的修改都将被永久删除,无法恢复。

实际应用场景:

撤销错误的提交:如果你提交了错误的代码,可以使用 git reset --hard HEAD^ 命令来撤销提交并删除所有的修改,然后重新提交正确的代码。
回退到历史版本:如果你想回退到某个历史版本,并且不需要保留任何修改,可以使用 git reset --hard 命令来重置当前分支到指定的提交。

举例:
在这里插入图片描述
现在的情况是:
每次添加一句诗,但是第三次时弄错了,添加成了第四句,因此
对于 Git 仓库中的txt文本,内容为:

床前明月光
疑是地上霜
低头思故乡
#显然,漏掉了第三句

对于暂存区,我们先在工作区中将补上第三句,再add,也即暂存区和工作区的文本内容都为:

床前明月光
疑是地上霜
举头望明月
低头思故乡

在这种情况下,如果使用 --hard模式回退一个版本,即两句诗的版本
Git 仓库和本地工作区都会变成:

床前明月光
疑是地上霜

而对于暂存区,当我们使用git status命令时,查询不到任何信息(暂存区内容被完全清空了,工作区的修改也被撤销,剩下都是稳态的东西不会再显示状态)

2. checkout

2.11 删除操作

删除也分几种情况。

2.11.1 手动删除本地文件

首先,我么应把删除也视为一种【修改】。

因此,如果文件已经纳入 Git 管理,我们右键删除了文件后,能在 Git中查询到记录,并且为了完成删除,我们需要 add 和 commit这个删除操作

比如,我们直接右键删除文件,此时用status命令应查到:
在这里插入图片描述
add commit 完成删除操作,并且能在日志查询到该记录
在这里插入图片描述
在这里插入图片描述

2.11.2 用命令删除

#从 Git 仓库、暂存区、工作区中同时移除对应的文件,即 index.js
git rm -f index.js

#只从 Git 仓库和暂存区中移除指定的文件,但保留工作区中的文件,即 index.css 文件
git rm --cached index.css

在这里插入图片描述
D 代表已删除,??代表 untracked,即只存在于工作区,等待 add

2.11.3 误删除

git restore --staged <file_name> 将暂存区的修改重新放回工作区(包括对文件自身的操作,如添加文件、删除文件)

git restore <file_name> 丢弃工作区的修改(不包括对文件自身的操作,如添加文件、删除文件)
(1) 工作区、暂存区、Git 仓库已经同步的情况下,误删除了本地文件(即工作区文件)

例如,先将 txt文件 add 并 commit,然后右键删除本地文件,此时

#该命令可以
git restore a.txt

在这里插入图片描述

3. 忽略文件与版本号

忽略文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 在这种情况下,我们可以创建一个名为 .gitignore 的配置文件,列出要忽略的文件的匹配模式。

文件 .gitignore 的格式规范如下:

① 以 # 开头的是注释

② 以 / 结尾的是目录

③ 以 / 开头防止递归

④ 以 ! 开头表示取反

⑤ 可以使用 glob 模式进行文件和文件夹的匹配(glob 指简化了的正则表达式)

星号 * 匹配零个或多个任意字符
[abc] 匹配任何一个列在方括号中的字符 (此案例匹配一个 a 或匹配一个 b 或匹配一个 c)
问号 ? 只匹配一个任意字符
两个星号 ** 表示匹配任意中间目录(比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等)
在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)

版本号

每一次Commit对应一个 40 位长的版本号,在对更改内容使用 SHA -1 加密算法后得到的。
这样,根据版本号,可以避免内容被篡改。

其次, 根据版本号的前两位,在.git/objects 文件夹中,可以找到本次 Commit 的记录。

1.6 合并分支

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

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

相关文章

贪心算法|435.无重叠区间

力扣题目链接 class Solution { public:// 按照区间右边界排序static bool cmp (const vector<int>& a, const vector<int>& b) {return a[1] < b[1];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.siz…

Go gorm库(详细版)

目录 01. 什么是ORM 02. 环境搭建 03. 连接数据库 高级设置 gorm 的命名策略 创建表 日志显示 04. 模型定义 定义一张表 自动生成表结构 修改表字段大小 字段标签 05. 单表查询 5.1 表结构 5.2 添加单条记录 5.3 批量插入 5.4 单条数据查询 5.5 根据主键查询…

微服务-7 Docker

一、镜像、容器、仓库 容器是镜像的实例&#xff0c;仓库中存储着镜像。 二、镜像的操作 三、容器的操作 创建容器停止容器&#xff0c;查看后发现没有了(docker ps 默认只展示没有停止的) docker ps -a (可以展示运行中和停止的镜像)删除容器&#xff1a;(docker rm 不能删除…

新手尝试硬件买单片机还是树莓派?

新手尝试硬件买单片机还是树莓派&#xff1f; 新手的话&#xff0c;先学单片机吧&#xff0c;51&#xff0c;stm32&#xff0c;都可以&#xff0c;很多学习平台给的例子比较多&#xff0c;程序相对都比较简单&#xff0c;更贴近硬件&#xff0c;玩起来比较容易做出小东西&…

【简明图文教程】Node.js的下载、安装、环境配置及测试

文章目录 前言下载Node.js安装Node.js配置Node.js配置环境变量测试后言 前言 本教程适用于小白第一次从零开始进行Node.js的下载、安装、环境配置及测试。 如果你之前已经安装过了Node.js或删除掉了Node.js想重新安装&#xff0c;需要先参考以下博客进行处理后&#xff0c;再根…

HarmonyOS实战开发-图片编辑、使用 TextArea 实现多文本输入

介绍 本示例使用 TextArea 实现多文本输入&#xff0c;使用 ohos.app.ability.common 依赖系统的图库引用&#xff0c;实现在相册中获取图片&#xff0c;使用 ohos.multimedia.image 生成pixelMap&#xff0c;使用pixelMap的scale()&#xff0c;crop()&#xff0c;rotate()接口…

学习云计算HCIE选择誉天有什么优势?

誉天云计算课程优势实战性强 课程注重实践操作&#xff0c;通过实际案例和实验操作&#xff0c;让学员深入了解云计算的应用场景和实际操作技能。课程内容全面 涵盖所有云计算涉及的IT基础知识、服务器、存储、网络等方面的基础知识&#xff0c;开源操作系统Linux&#xff0c;开…

HarmonyOS实战开发-拼图、如何实现获取图片,以及图片裁剪分割的功能。

介绍 该示例通过ohos.multimedia.image和ohos.multimedia.mediaLibrary接口实现获取图片&#xff0c;以及图片裁剪分割的功能。 效果预览 使用说明&#xff1a; 使用预置相机拍照后启动应用&#xff0c;应用首页会读取设备内的图片文件并展示获取到的第一个图片&#xff0c;…

【muzzik 分享】3D模型平面切割

# 前言 一年一度的征稿到了&#xff0c;倒腾点存货&#xff0c;3D平面切割通常用于一些解压游戏里&#xff0c;例如水果忍者&#xff0c;切菜这些&#xff0c;今天我就给大家讲讲怎么实现3D切割以及其原理&#xff0c;帮助大家更理解3D中的 Mesh(网格)&#xff0c;以及UV贴图和…

机器学习和深度学习--李宏毅(笔记与个人理解)Day11-12

Day11 when gradient is small…… 怎么知道是局部小 还是鞍点&#xff1f; using Math 这里巧妙的说明了hessan矩阵可以决定一个二次函数的凹凸性 也就是 θ \theta θ 是min 还是max&#xff0c;最后那个有些有些 哈 是一个saddle&#xff1b; 然后这里只要看hessan矩阵是不…

Element-UI 下拉框单选转多选回显不清空绑定的值

需求 根据radio切换来更改下拉框是否多选 原因 单选和多选这两个 input 看上去没差别&#xff08;自身和层级都一致&#xff09;&#xff0c;vue出于提高性能&#xff0c;所以 vue 给复用了 解决方案 <template><section><el-radio-group v-model"radi…

风储微网虚拟惯性控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 风储微网虚拟惯性控制系统simulink建模与仿真。风储微网虚拟惯性控制系统是一种模仿传统同步发电机惯性特性的控制策略&#xff0c;它通过集成风力发电系统、储能系统和其他分…

聚丙烯PP它的化学特性是什么? UV胶水能够粘接聚丙烯PP吗?

聚丙烯PP它的化学特性是什么? UV胶水能够粘接聚丙烯PP吗&#xff1f; 聚丙烯&#xff08;Polypropylene&#xff0c;简称PP&#xff09;是一种热塑性聚合物&#xff0c;属于聚烯烃类塑料之一。以下是聚丙烯的一些化学特性&#xff1a; 1. 分子结构&#xff1a; 聚丙烯是由丙烯…

再说vue响应式数据

请说一下你对响应式数据的理解 如何实现响应式数据据 对象 vue2 响应式核心代码 数组 vue2 处理缺陷Vue3则采用 proxy - vue3 响应式核心代码 请说一下你对响应式数据的理解 如何实现响应式数据据 数组和对象类型当值变化时如何劫持到。 对象 对象内部通过defineReactive方…

如何将普通maven项目转为maven-web项目

文件-项目结构&#xff08;File-->Project Structure &#xff09; 模块-->learn&#xff08;moudle-->learn&#xff09; 选中需要添加web的moudle&#xff0c;点击加号&#xff0c;我得是learn&#xff0c;单击选中后进行下如图操作&#xff1a; 编辑路径 结果如下…

Centos7 k8s 集群 - Rook Ceph 安装

环境准备 基础环境 系统名称操作系统CPU内存硬盘Kubernete 版本Docker版本IPmasterCentos74c4gsdb 20G1.17.023.0.1192.168.1.128node01Centos74c4gsdb 20G1.17.023.0.1192.168.1.129node02Centos74c4gsdb 20G1.17.023.0.1192.168.1.130node03Centos74c4gsdb 20G1.17.023.0.1…

OpenHarmony4.0分布式任务调度浅析

1 概述 OpenHarmony 分布式任务调度是一种基于分布式软总线、分布式数据管理、分布式 Profile 等技术特性的任务调度方式。它通过构建一种统一的分布式服务管理机制&#xff0c;包括服务发现、同步、注册和调用等环节&#xff0c;实现了对跨设备的应用进行远程启动、远程调用、…

3d怎么按路径制作模型---模大狮模型网

在3D建模中&#xff0c;按路径制作模型是一种常见的技术&#xff0c;特别适用于创建曲线、管道、绳索等线性形状的物体。虽然这项技术可能对初学者来说有些复杂&#xff0c;但通过一步步的指导和实践&#xff0c;你将能够掌握它。本文将详细介绍按路径制作模型的步骤&#xff0…

OpenDDS-3.27构建与用法

一、OpenDDS-3.27构建 ./configure To enable Java bindings, use ./configure --java make 二、运行Messenger Example&#xff1a; source setenv.sh For the C example&#xff1a;cd DevGuideExamples/DCPS/Messenger For the Java example&#xff1a;cd java/tests/mes…

【JVM】JVM堆占用情况分析(频繁创建的对象、内存泄露等问题)、jmap+jhat、jvisualvm工具使用

文章目录 一. 相关命令1. 查看进程堆内存整体使用情况&#xff1a;OOM的可能2. 统计类的对象数量以及内存占用&#xff1a;定位内存泄漏 二. 分析内存占用1. 使用 jhat 排查对象堆占用情况1.1. 排查步骤1.2. 具体分析例子a. 分析频繁创建对象导致的OOM 1.3. OQL查看某一个对象的…