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

news/2025/2/24 13:03:42

目录

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=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"即可


http://www.niftyadmin.cn/n/5864350.html

相关文章

MySQL -安装与初识

博客主页:【夜泉_ly】 本文专栏:【暂无】 欢迎点赞👍收藏⭐关注❤️ 文章目录 安装1. 更新系统包列表2. 安装MySQL服务器3. 启动并验证MySQL服务4. 运行安全配置向导5. 验证MySQL登录6. 设置root用户密码7. 配置远程访问(可选&…

ArcGIS Pro在洪水淹没分析中的应用与实践

如何使用ArcGIS Pro进行洪水淹没分析 洪水作为一种自然灾害,对人类社会和自然环境造成的威胁日益显著。 为了更好地理解和预测洪水事件,洪水淹没分析显得尤为重要。 ArcGIS Pro作为一款强大的地理信息系统(GIS)软件&#xff0c…

图书馆系统源码详解

本项目是一个基于Scala语言开发的图书馆管理系统。系统主要由以下几个部分组成:数据访问层(DAO)、数据模型层(Models)、服务层(Service)以及用户界面层(UI)。以下是对项目…

Linux MySQL 8.0.29 忽略表名大小写配置

Linux MySQL 8.0.29 忽略表名大小写配置 问题背景解决方案遇到的问题: 问题背景 突然发现有个大写的表报不存在。 在Windows上,MySQL是默认支持忽略大小写的。 这个时候你要查询一下是不是没有配置: SHOW VARIABLES LIKE lower_case_table…

论文阅读:Non-parametric Sensor Noise Modeling and Synthesis

今天介绍的这篇工作是 ECCV 2024 的一篇文章,关于建模 sensor 噪声分布的。 Abstract 本文提出了一种新颖的非参数传感器噪声模型,该模型可直接从拍摄图像中按强度级别构建概率质量函数。我们证明,与现有模型相比,我们的噪声模型…

怎么合并主从分支,要注意什么

在 Git 中合并主从分支(例如将 feature 分支合并到 main 分支)是一个常见操作。以下是具体步骤和注意事项: 合并分支的步骤 切换到主分支 git checkout main确保当前在 main 分支。 拉取最新代码 git pull origin main确保 main 分支是最…

【llm落地】从零到一,用DeepSeek打造智能BI工具:自然语言驱动数据洞察

在数据驱动的时代,商业智能 (BI) 工具已经成为企业决策的关键。然而,传统的 BI 工具往往操作复杂,需要专业技能才能驾驭。想象一下,如果用户只需要用 自然语言 就能轻松查询数据、获取分析结果甚至生成可视化图表,那将会多么高效和便捷! 本文将带你踏上从零到一构建智能…

【vector<int> arr 还是vector<int> arr 】关于空间的内存问题

两种写法分别是&#xff1a; int binarySearch(const std::vector<int>& arr, int target)int binary_search(const vector<int> data_set, int value) 这两种写法的主要区别在于参数传递的方式&#xff1a;引用传递和值传递。下面详细解释为什么推荐使用第一…