Git版本控制系统---本地操作(万字详解!)

目录

git基本配置

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

添加文件--情况一:

添加文件-情况二:

修改文件:

版本回退:

git基本配置

1.初始化本地仓库,注意:一定要在一个目录下进行,一般都是新建一个文件夹,在文件夹中进行下文操作
    指令:git init
2.初始化git的提交用户+邮箱
    2.1:配置用户名:git config user.name "gitee的用户名||github用户名" 
    注意!,如果是gitee,你的用户名是@后面的字符串,不包括@!
    2.2:配置邮箱:git config user.email "gitee/github绑定的邮箱地址"
3.查看当前路径下本地仓库的配置信息
    指令:git config -l
4.重置配置信息
    4.1:重置姓名:git config --unset user.name
    4.2:重置邮箱:git config --unset user.email
5.将当前机器上所有的用户都配置相同的用户和密码
    指令:git config --global user.name "gitee的用户名||github用户名"
    指令:git config --global user.email "gitee/github绑定的邮箱地址"
    注意:通过--global选项配置的账户信息是不能直接通过上述第4条说明中的指令重置的!!需要的指令如下:
    重置用户名:git config --global --unset user.name
    重置邮箱:git config --global --unset user.email

补充:1.gitee用户名位置:再次提醒:不要带上@!!!!!!!!!不要带上@!!!!!!!!!不要带上@!!!!!!!!!

2.查询giteer账号绑定的邮箱:在gitee主页(即上述图片界面),鼠标移动到右上角头像处,会有一个设置选项,点击,左边列表中有一个邮箱管理,点击后就能看到当前gitee账号绑定的邮箱

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

在本地仓库目录中,创建一个Readme文件,注意!不能直接在.git中创建!禁止一切手动修改.git的操作
版本库:-->.git文件
工作区:-->Readme所在目录下,但不包括.git文件
暂存区:-->版本库的stage模块,又称索引
add操作
将工作区被修改的部分提交到暂存区stage
commit操作
将暂存区stage中的内容提交到某个分支,默认master分支

简易流程图:

添加文件--情况一:

概念补充:.表示当前路径  ..表示上一级路径
1.先前面创建的Readme文件中写点东西,比如"hello git!"
2.提交方式
    将工作区的内容提交到暂存区
    2.1:提交指定工作区指定内容
    指令:git add 带路径的文件名(不带路径会默认为当前路径中的文件)
    可以连续带多个文件名,之间使用空格隔开:git add file1 file2...
    2.2:提交当前目录下所有的内容
    指令:git add .
    将暂存区内容提交到master分支
    2.3:命令后可以带选项,例如 -m 表示提交内容的同时携带对提交内容的说明信息,
         方便记忆:其实-m就是message的缩写
    指令:git commit -m "说明信息"
    注意:执行commit命令之前一定要先add过,并且使用commit指令一定要带上-m选项!!
    查看git的历史提交记录:
    指令:git log
    优雅的查看历史提交记录:
    指令:git log --pretty=oneline

添加文件-情况二:

1.先在工作区创建1个文件,test1.txt
依次执行以下指令:
    1.1:git add test1.txt
    1.2:Linux机器:touch test2.txt 
    windows机器:直接鼠标创建test2.txt
    1.3:git commit -m "test1.txt add"
 观察现象,显示有几个文件提交了?只有1个!就是test1.txt

修改文件:

Git追踪的是工作区的修改,而不是文件本身!

当我们对已经commit过的工作区文件进行修改时,比如,打开之前创建的Readme文件,新增一行数据,比如新增"hello mygit!"
查看git状态的指令:
    指令:git status
Linux上显示如下:

但是如果我想看到更详细的内容,比如:想知道是哪几行修改了,是增加还是删除?

指令:git diff 工作区被修改的文件名

Linux上显示如下,windows大差不差:

windows会更直观,不再赘述。

Readme文件被我们修改了,那么按照之前所说的,先add到暂存区,再commit到master分支
指令: 
    1.git add Readme
查一下:
    2.git status
 提示你,.git中的statge已被改变,需要commit到mater分支
    3.git commit -m "update Readme"
再查一下:
    4.git status
显示工作区和暂存区都无改动了
done

版本回退:

什么是版本回退?举几个栗子:

1.就像是你在烹饪一道复杂的菜肴时,突然发现自己加错了调料,然后决定“时光倒流”, 回到加调料前的那一刻,重新来过。

2.想象一下,你正在编写一个超级英雄的故事,你已经写到了“超级英雄打败了大反派,拯救了世界!”这一章。 但是,你突然意识到,在之前的某一章里,你给超级英雄加了一个奇怪的能力,比如“只剩一滴血也能重生”, 这个能力实在是太奇葩了,完全破坏了故事的整体氛围。 这时,Git版本回退就派上用场了。你可以使用Git的“时光机”(其实是一些命令), 回到那个添加奇怪能力的章节之前,然后就像那个能力从未存在过一样,继续你的创作

3.你正在准备毕业论文,第一版写完后交给老师,老师不满意,于是你哼哧哼哧的修改好了第二版论文, 此时你兴高采烈的又交给老师,老师说你的第二版论文格式有问题,内容也偏题了,回去重写,好吧, 于是你垂头丧气的又回去改了第三版论文交给老师,老师对着你说:"小明啊,你还是把第一版论文交给我吧, 你这几版还不如第一版呢!",你听到这话,心里非常庆幸,因为你将每一版论文都进行过备份,于是你找到 第一版备份交给了老师,成功通过,顺利毕业;

回归正题:

之前我们经常上面使用的Readme文件最开始只有一行内容"hello git!";add+commit之后,这就是第一版的Readme文件,之后我们又增加了一行内容"hello mygit!",add+commit之后就是第二版Readme文件

版本回退:
    指令:git reset [--soft] [--mixed] [--hard] [HARD]
注意:此处的[HARD]指的是git提交记录中用看标识提交ID的字符串哈希编码,如何查看HEAD?
前面提到过指令:git log --pretty=oneline
打印出来的左侧的字符串编码即是每次提交的HEAD

列个表格辅助理解:

首先,最后一版的Readme内容为"hello git!" 和"hello mygit"

reset命令不带选项默认为--mixed
版本回退实操:
    指令:
    1.查看一下git提交日志:git log --pretty=oneline
    2.根据HEAD选择要回退的版本

此处我选择回退至第一版,采用--hard选项
指令:git reset --hard d2c9915d4d2a5ca706c0e31de9df62a47796b944
回退之后,查一下git提交日志,显示如下:

此时Readme文件的内容被重置为原来的一行:"hello git!"

如果此时我们回退版本的时候,后悔了怎么办?
指令:
    git reset --hard dfc471a62a287d4cfc27d3968fe104d03980b859
上述HEAD是我们最开始查日志的时候显示的最新一次提交的版本的字符串哈希值,如果你反悔了,在记得回退前的
版本的HEAD时,就可以使用上述指令撤销本次回退
如果你记不到HEAD了,git也是有后悔药可以吃的!
指令:git reflog 
功能:查询更新前的git提交日志信息,其中有你日志更新前的所有版本提交的日志,其中有HEAD信息还有最左侧的部分信息
而部最左侧的信息也可以用来充当HEAD来进行撤销操作

撤销操作:

注意:这里说的撤销操作,只针对本地仓库,对于远端仓库不生效! 所以撤销操作的前提条件是:commit之后没进行push操作,这里的push操作暂不说明. 场景:当在某一个版本的基础上开发新的代码时,写了一坨之后,决定实在垃圾, 于是想撤销自己在当前版本之上写的所有代码时,就需要用到撤销操作。 撤销操作有三个场景,表格如下所示:

情况一:只更改了工作区的代码,其他区域未改变;

1.手动修改--代码量大的时候强烈不推荐!!
2.使用指令修改
    指令:git checkout -- 要撤销修改的文件
解释:一定要带上--俩个符号,表示撤销到最近一次更新的版本

情况2:修改了工作区代码后,又add到了暂存区中,但是版本库中未改变

方法1:使用reset指令 + hard选项
    指令:git reset --hard HEAD
    解释:HEAD-->直接写HEAD表示回退至当前版本,HEAD^表示上个版本,以此类推;
方法2:使用reset指令 + mixed选项
    指令:git reset --mixed HEAD
    此时又回到了情况一
    则:git checkout -- 要撤销修改的文件即可

情况3:工作区、暂存区、版本库中都被修改了

1.直接使用reset指令:
    指令:git reset --hard HEAD^
    或者:git reset --hard 字符串哈希值(先git log 查询一下哈希值)

删除文件:

1.假设删除了工作区的文件,例如rm file.txt 注意:删除也算工作区的变动,所以也要同步到暂存区和版本库 1.1:git add file.txt 1.2:git commit -m "delete file.txt" 2. git提供的删除命令 指令:git rm 要删除的文件名 再接着:git commit -m "delete file.txt"即可

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

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

相关文章

IDEA配置JSP环境

首先下载IDEA2021.3,因为最新版本不能简单配置web开发环境。然后新建一个java开发项目: 然后右键创建的项目,添加web框架: 选择web appliciation 在web inf文件夹下创建classes和lib文件夹: 点击file ,选择…

前端兼容处理接口返回的文件流或json数据

参考文档:JavaScript | MDN 参考链接:Blob格式转json格式,拿到后端返回的json数据_blob转json-CSDN博客 参考链接:https://juejin.cn/post/7117939029567340557 场景:导入上传文件,导入成功,…

短剧源码部署搭建小程序搭建IAA+IAP混合解锁模式

在当今数字化内容消费迅速增长的时代,短剧作为一种新兴的内容形式,凭借其短小精悍、节奏紧凑的特点,迅速吸引了大量用户。作为一名软件体验测试人员,我有幸体验了一款集创新与实用为一体的短剧小程序。这款小程序不仅在前端用户体…

网络原理---HTTP/HTTPS

通过之前的网络编程,我们已经初步了解UDP和TCP的基本实现方法,接下来我们对其进一步的学习。 在网络编程中: 1.读和写数据通过Socket,通过Socket内置的InputStream和OutputStream(读写的基本单位都是字节)。2.当在编…

【Python修仙编程】(二) Python3灵源初探(2)

第一部分:林羽的修仙之旅——字符串与布尔类型的修炼 林羽站在练气期一阶的起点,望着手中的《Python无极心法》秘籍,心中充满了期待。师傅玄天真人在一旁微笑着说道:“林羽,今天我们要修炼的是‘字符串’和‘布尔类型…

【HTML— 快速入门】HTML 基础

准备工作 vscode下载 百度网盘 Subline Text 下载 Sublime Text下载 百度网盘 vscode 下载 Sublime Text 是一款轻量好用的文本编辑器,我们在写前端代码时,使用 Sublime Text 打开比使用记事本打开,得到的代码体验更好,比 vscode…

pipeline 使用git parameter插件实现动态选择分支构造

效果,,点击build with Parameters 就会出现右边的当前仓库的所有的分支,默认最多显示5个,可以修改配置,修改显示的最大分支数量。如果分支太多,可以通过右边的过滤框输入过滤。 安装git params插件 搜索g…

国产OS上完整编译Qt5.15、搭建基本开发环境需要的库

近期有师弟问我国产OS安装Qt5.15编译老是不完整,不是没声音,就是没视频,或者没有xcb。通过QEMU模拟Arm64,闲来20几天摸索,完整编译了Qt5.15,并编译成功了我的SDR玩具taskBus。 1.主要结论: 该O…

数据库 安装initializing database不通过

出现一下情况时: 处理方法: 将自己的电脑名称 中文改成英文 即可通过

【视频2 - 4】初识操作系统,Linux,虚拟机

📝前言说明: ●本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,主要跟随B站博主灵茶山的视频进行学习,专栏中的每一篇文章对应B站博主灵茶山的一个视频 ●题目主要为B站视频内涉及的题目以及B站视频中提到的“课后作业”。…

AI绘画软件Stable Diffusion详解教程(2):Windows系统本地化部署操作方法(专业版)

一、事前准备 1、一台配置不错的电脑,英伟达显卡,20系列起步,建议显存6G起步,安装win10或以上版本,我的显卡是40系列,16G显存,所以跑大部分的模型都比较快; 2、科学上网&#xff0…

将Ubuntu操作系统的安装源设置为阿里云

在使用Ubuntu操作系统时,默认的软件源通常是国外的仓库,这可能会导致软件安装和更新速度较慢。为了提高下载速度和稳定性,我们可以将Ubuntu的安装源设置为阿里云镜像源。以下是详细步骤: 一、准备工作 在开始之前,请确保您的Ubuntu系统可以正常上网,并且您拥有管理员权…

IP-------GRE和MGRE

4.GRE和MGRE 1.应用场景 现实场景 居家工作,公司工作,分公司工作----------需要传输交换数据--------NAT---在该场景中需要两次NAT(不安全) 为了安全有两种手段-----1.物理专线---成本高 2.VPN--虚拟专用网---隧道技术--封装技…

Visual Studio Code 跨平台安装与配置指南(附官方下载链接)

一、软件定位与核心功能 Visual Studio Code(简称VS Code)是微软开发的开源跨平台代码编辑器,支持超过50种编程语言的智能补全、调试和版本控制功能。2025版本新增AI辅助编程模块,可自动生成单元测试代码和API文档注释。 二、下载…

小智AI桌宠机器狗

本文主要介绍如何利用开源小智AI制作桌宠机器狗 1 源码下载 首先下载小智源码,下载地址, 下载源码后,使用vsCode打开,需要在vscode上安装esp-idf,安装方式请自己解决 2 源码修改 2.1添加机器狗控制代码 在目录main/iot/things下添加dog.cc文件,内容如下; #include…

Linux:进程信号(二.信号的保存与处理、递达、volatile关键字、SIGCHLD信号)

目录 1.信号保存 1.1递达、未决、阻塞等概念 1.2再次理解信号产生与保存 1.3信号集操作函数 sigset_t类型 sigemptyset() 函数 sigismember()函数 sigaddset ()函数 sigdelset() 函数 sigprocmask()系统调用 sigpending()系统调用 2.信号的处理/递达 2.1信号处理时…

kotlin 知识点 七 泛型的高级特性

对泛型进行实化 泛型实化这个功能对于绝大多数Java 程序员来讲是非常陌生的,因为Java 中完全没有这个概 念。而如果我们想要深刻地理解泛型实化,就要先解释一下Java 的泛型擦除机制才行。 在JDK 1.5之前,Java 是没有泛型功能的,…

go基本语法

跟Java比较学习。 hello word 示例代码 test1.go文件: // 包路径 package main// 导入模块,下面两种都行 import ("fmt" ) import "log"// main方法 func main() {log.Print("hello word !!!")fmt.Print("hello …

Linux内核,slub分配流程

我们根据上面的流程图,依次看下slub是如何分配的 首先从kmem_cache_cpu中分配,如果没有则从kmem_cache_cpu的partial链表分配,如果还没有则从kmem_cache_node中分配,如果kmem_cache_node中也没有,则需要向伙伴系统申请…

冯诺依曼体系结构 ──── linux第8课

目录 冯诺依曼体系结构 关于冯诺依曼,必须强调几点: 冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系 输入单元:包括键盘, 鼠标,网卡,扫…