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

embedded/2025/2/24 10:54:46/

目录

git%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE-toc" name="tableOfContents" style="margin-left:0px">git基本配置

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

添加文件--情况一:

添加文件-情况二:

修改文件:

版本回退:

git%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE" name="git%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE">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=oneline2.根据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"即可


http://www.ppmy.cn/embedded/164810.html

相关文章

Vulhub靶机 Apache Druid(CVE-2021-25646)(渗透测试详解)

一、开启vulhub环境 docker-compose up -d 启动 docker ps 查看开放的端口 1、漏洞范围 在Druid0.20.0及更低版本中 二、访问靶机IP 8888端口 1、点击Load data进入新界面后,再点击local disk按钮。 2、进入新界面后,在标红框的Base directory栏写上…

财务运营域——电子影像系统设计

摘要 文章主要介绍了电子影像系统的设计与应用。随着企业规模扩大和业务复杂化,传统纸质文档管理方式暴露出诸多问题,电子影像技术应运而生。它通过数字化扫描、存储和管理纸质文档,实现高效检索、实时共享、安全存储和流程自动化&#xff0…

视觉应用工程师(面试)

视觉应用工程师(面试) 1.自我介绍、会的技能、项目 2.相机和机械手调试过程 检查硬件,看软件驱动是否链接,调节相机和镜头保证能够识别这个物料,看接口和通讯是否正常,如:波特率,数…

SSI用量子计算来玩AI

刚到家,早上说今天回来要写SSI为什么这么牛B,那就必须得写 SSI是什么公司? Safe Super Intelligence 就是中间这个秃子的公司 ilya 前openAI 首席科学家(现在的mark chen确实有点水) Daniel Gross、Ilya Sutskever、Daniel Levy&#xff…

使用visual studio对dmp文件进行调试(winform)

网上有很多关于使用vs对dmp的调试教程,不过大多比较简略,为便于日后查阅,综合自己调研的过程,特此书写整个调试流程。 终极目标:根据dmp文件,找到程序异常位置调试工具:visual studio 2022 ent…

蓝桥杯备考:贪心算法之排座位

这道题横着放和竖着放之间是不会产生影响的 我们先说一下算法原理:我们先把所有行能阻止交头接耳的学生数量计算出来,再把每列的计算出来,然后再排一下序,按编号输出最大的几个,但是如果我们用数组存这些数据的话&…

基础dp——动态规划

目录 一、什么是动态规划? 二、动态规划的使用步骤 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 三、试题讲解 1.最小花费爬楼梯 2.下降路径最小和 3.解码方法 一、什么是动态规划? 动态规划(Dynamic Programming&…

debian 12 系统容器更换阿里源和用户权限

背景:镜像 emqx/emqx:5.8.4 用户为 emqx 无权限 系统为 debian 12 使用 root 用户创建容器登录即可 发现时间不对,换阿里源之后无法更新 更换上海时区 echo "Asia/Shanghai" > /etc/timezone ln -sf /usr/share/zoneinfo/Asia/Shanghai /…