git:基本操作(2)

news2024/11/22 17:23:44

目录

git操作(2)

1.版本回退

2.撤销修改

3.删除文件


git操作(2)

1.版本回退

        git能够管理文件的历史版本,这也是版本控制器的重要能力,因此,git也提供了版本回退这样的功能。

        执行git reset进行回退版本,可以指定退回某一次提交的版本。回退是为了将版本库中的内容回退,而工作区和暂存区中的内容是否要回退由命令选项决定。

git reset --mixed/--soft/--hard HEAD
  • --mixed为默认选项,使用时可以不带命令参数,该命令将版本库和暂存区的内容回退到指定的提交版本,工作区的内容保持不变。
  • --soft将版本库中的内容回退到指定的提交版本,暂存区和工作区的内容保持不变
  • --hard将版本库、暂存区、工作区的内容都回退到指定的提交版本,因此,这个命令参数要慎用。
  • HEAD说明:

        1.可以使用commit id表示指定回退的版本

        2.可以使用^表示:

        HEAD表示当前版本

        HEAD^表示上个版本

        HEAD^^表示上上个版本

        3.可以使用~数字表示:

        HEAD~0表示当前版本

        HEAD~1表示上个版本

        HEAD~2表示上上个版本

工作区暂存区版本库
--soft不变不变回退
--mixed不变回退回退
--hard回退回退回退

        为了便于表述,方便测试回退功能,我们先更新3个版本的ReadMe,提交三次,分别表示3个版本。

1 //第⼀次修改提交
2 hyb@139-159-150-152:~/gitcode$ cat ReadMe 
3 hello bit
4 hello git
5 hello world
6 hello version1
7 hyb@139-159-150-152:~/gitcode$ git add ReadMe 
8 hyb@139-159-150-152:~/gitcode$ git commit -m"add version1"
9 [master cff9d1e] add version1
10 1 file changed, 1 insertion(+)
11
12 // 第⼆次修改提交
13 hyb@139-159-150-152:~/gitcode$ cat ReadMe 
14 hello bit
15 hello git
16 hello world
17 hello version1
18 hello version2
19 hyb@139-159-150-152:~/gitcode$ git add ReadMe 
20 hyb@139-159-150-152:~/gitcode$ git commit -m"add version2"
21 1 file changed, 1 insertion(+)
22
23 // 第三次修改提交
24 hyb@139-159-150-152:~/gitcode$ cat ReadMe 
25 hello bit
26 hello git
27 hello world
28 hello version1
29 hello version2
30 hello version3
31 hyb@139-159-150-152:~/gitcode$ git add ReadMe 
32 hyb@139-159-150-152:~/gitcode$ git commit -m"add version3"
33 [master d95c13f] add version3
34 1 file changed, 1 insertion(+)
35
36 # 查看历史提交记录
37 hyb@139-159-150-152:~/gitcode$ git log --pretty=oneline
38 d95c13ffc878a55a25a3d04e22abfc7d2e3e1383 (HEAD -> master) add version3
39 14c12c32464d6ead7159f5c24e786ce450c899dd add version2
40 cff9d1e019333318156f8c7d356a78c9e49a6e7b add version1

        现在,如果我们在提交完version3以后,发现编写错误,想要回退到version2重新编写,这里希望是工作区回退到上一个版本,因此使用 --hard命令参数。

 hyb@139-159-150-152:~/gitcode$ git reset --hard 14c12c32464d6ead7159f5c24e786ce4
 HEAD is now at 14c12c3 add version2
 hyb@139-159-150-152:~/gitcode$ cat ReadMe 
 hello bit
 hello git
 hello world
 hello version1
 hello version2

        查看日志发现已经回退到上一个版本了。

1 hyb@139-159-150-152:~/gitcode$ git log --pretty=oneline
2 14c12c32464d6ead7159f5c24e786ce450c899dd (HEAD -> master) add version2
3 cff9d1e019333318156f8c7d356a78c9e49a6e7b add version1

         那么此时再想回退到version3怎么办,如果能轻易获取到提交version3版本的commit id,同样使用git reset命令也可以回退到version 3。

git reset --hard "version3的commit id"

        或者可以使用命令git reflog查看本机的提交记录。

1 hyb@139-159-150-152:~/gitcode$ git reflog
2 14c12c3 (HEAD -> master) HEAD@{0}: reset: moving to 14c12c32464d6ead7159f5c24e78
3 d95c13f HEAD@{1}: commit: add version3
4 14c12c3 (HEAD -> master) HEAD@{2}: commit: add version2
5 cff9d1e HEAD@{3}: commit: add version1
6 94da695 HEAD@{4}: commit: add modify ReadMe file
7 23807c5 HEAD@{5}: commit: add 3 files
8 c614289 HEAD@{6}: commit (initial): commit my first file

        这里需要注意的是,该命令结果显示的commit id仅仅是commit id的一部分,即使如此,也可以用来回退版本。

1 //回退到v3
2 hyb@139-159-150-152:~/gitcode$ git reset --hard d95c13f
3 HEAD is now at d95c13f add version3
4
5 //查看⼯作区
6 hyb@139-159-150-152:~/gitcode$ cat ReadMe 
7 hello bit
8 hello git
9 hello world
10 hello version1
11 hello version2
12 hello version3
13
14 //查看log
15 hyb@139-159-150-152:~/gitcode$ git log --pretty=oneline
16 d95c13ffc878a55a25a3d04e22abfc7d2e3e1383 (HEAD -> master) add version3
17 14c12c32464d6ead7159f5c24e786ce450c899dd add version2
18 cff9d1e019333318156f8c7d356a78c9e49a6e7b add version1
19 94da6950d27e623c0368b22f1ffc4bff761b5b00 add modify ReadMe file
20 23807c536969cd886c4fb624b997ca575756eed6 add 3 files
21 c61428926f3853d4ec6dde904415b0e6c1dabcc6 commit my first file

        但是,在实际的企业级开发中,提交次数是海量的,因此回退到工作区这种操作要谨慎使用commit id的查找并没有想象中那么轻而易举。

        在版本回退的操作过程中,速度是非常快的,因此底层并不是删除代码或新增代码,而是本控制。在git内部有一个指向当前分支(这里是master)的指针HEADrefs/heads/master里面保存这当前分支master的最新一次commit id,当我们进行版本回退时,git仅仅是修改refs/heads/master里面的commit id

  •  

2.撤销修改

        如果我们当前正在工作区写代码,想要回退到刚开始的状态,要怎么做呢。当然,如果仅仅是有2、3行的变化我们可以直接删除,但是如果有多个文件发生了大量改动,有什么命令可以完成我们的需求呢?

  •  情况1:仅仅是工作区被修改,没有add
//使用checkout,当前场景必须使用 -- ,否则,就是另一种用法
git checkout -- 文件名
1 //向ReadMe中新增⼀⾏代码
2 hyb@139-159-150-152:~/gitcode$ vim ReadMe 
3 hyb@139-159-150-152:~/gitcode$ cat ReadMe 
4 hello bit
5 hello git
6 hello world
7 hello version1
8 hello version2
9 hello version3
10 This piece of code is like shit //新增代码
11
12 //恢复到上⼀次 add 或 commit
13 hyb@139-159-150-152:~/gitcode$ git checkout -- ReadMe
14 hyb@139-159-150-152:~/gitcode$ cat ReadMe 
15 hello bit
16 hello git
17 hello world
18 hello version1
19 hello version2
20 hello version3
21
  • 情况2:已经add,但没有commit

        这种情况可以分成2步来解决,使用git reset --mixed,将暂存区的内容回退到当前版本。将工作区的内容回退,和情况1的解决方法相同。

        第一步:

1 //--mixed 是默认参数,使⽤时可以省略
2 hyb@139-159-150-152:~/gitcode$ git reset HEAD ReadMe
3 Unstaged changes after reset:
4 M ReadMe

        第二步:

1 hyb@139-159-150-152:~/gitcode$ git checkout -- ReadMe
2 hyb@139-159-150-152:~/gitcode$ git status
3 On branch master
4 nothing to commit, working tree clean
5 hyb@139-159-150-152:~/gitcode$ cat ReadMe 
6 hello bit
7 hello git
8 hello world
9 hello version1
10 hello version2
11 hello version3
  • 情况3:已经commit
//使用git reset --hard
git reset --hard HEAD^

        不过这种情况只适用没有将本地仓库push到远程仓库的情况。

3.删除文件

        删除文件也是一种修改。如果我们像下面这样删除文件file5

1 hyb@139-159-150-152:~/gitcode$ ls
2 file1 file2 file3 file4 file5 ReadMe
3 hyb@139-159-150-152:~/gitcode$ rm file5

        这样的删除仅仅是在工作区删除了文件,被记录为一次修改,git status会显示这种修改。

1 hyb@139-159-150-152:~/gitcode$ git status
2 On branch master
3 Changes not staged for commit:
4 (use "git add/rm <file>..." to update what will be committed)
5 (use "git restore <file>..." to discard changes in working directory)
6 deleted: file5
7
8 no changes added to commit (use "git add" and/or "git commit -a")

       在这时,一般是可能发生了两种情况:

  • 确实要在版本库中删除该文件
  • 误删

        如果是误删,可以看成是工作区的一次修改恢复到原来的状态。

1 hyb@139-159-150-152:~/gitcode$ git checkout -- file5
2 hyb@139-159-150-152:~/gitcode$ ls
3 file1 file2 file3 file4 file5 ReadMe

        而如果是真的要从版本库中删除该文件,就要使用git rm命令将文件从工作区和暂存区中删除,再做一次提交

1 hyb@139-159-150-152:~/gitcode$ git rm file5
2 rm 'file5'
3 hyb@139-159-150-152:~/gitcode$ git status
4 On branch master
5 Changes to be committed:
6 (use "git restore --staged <file>..." to unstage)
7 deleted: file5
8
9 hyb@139-159-150-152:~/gitcode$ git commit -m"deleted file5"
10 [master 5476bde] deleted file5
11 1 file changed, 0 insertions(+), 0 deletions(-)
12 delete mode 100644 file5
13 hyb@139-159-150-152:~/gitcode$ git status
14 On branch master
15 nothing to commit, working tree clean

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

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

相关文章

QT6聊天室项目 网络通信实现逻辑分析

实现逻辑 模块话网络通信设计分析 NetClient类 功能&#xff1a;负责与服务器进行通信httpClient:处理HTTP请求websocketClient&#xff1a;处理WebSocket通信 HTTP请求封装 设计请求和服务器响应的接口设计函数测试网络连接性设计处理的函数处理HTTP请求&#xff08;后期实现…

C#/.NET/.NET Core推荐学习路线文档文章

前言 专门为C#/.NET/.NET Core推荐学习路线&文档&文章提供的一个Issues&#xff0c;各位小伙伴可以把自己觉得不错的学习路线、文档、文章相关地址分享出来&#x1f91e;。 https://github.com/YSGStudyHards/DotNetGuide/issues/10 &#x1f3f7;️C#/.NET/.NET Cor…

智慧工地解决方案-2

### 1. 智慧工地解决方案概述 《智慧工地解决方案》针对传统工地的低效率和高风险问题&#xff0c;提出了一套集成现代技术的智能管理系统&#xff0c;以提升工地安防和生产效率。 ### 2. 工地现状与挑战 当前工地存在安全意识薄弱、管理粗放、环境污染监测困难等问题&#…

数据分析面试题:客户投保问题分析

目录 0 场景描述 1 数据准备 2 问题分析 2.1 计算小微公司的平均经营时长 2.2 计算小微公司且角色为投保人,保险起期在18年的总保费 2.3 假设,DWD_CUSTOMER_REL客户关联关系表中,存在部分客户保单数很多,部分客户保单数很少的情况,此时DWD_CUSTOMER_BASE表关联,程序…

Learn ComputeShader 10 HUD Overlay

前言&#xff1a; 1. HUD Overlay (Head-Up Display Overlay) 定义: HUD 是指游戏或应用程序中的一类叠加界面元素&#xff0c;通常显示在屏幕上&#xff0c;用于向用户提供实时信息。它通常显示关键信息而不会打断用户的主要活动或视线。应用场景: 常见于游戏、飞行模拟器和…

[项目][CMP][Page Cache]详细讲解

目录 1.申请内存2.释放内存3.框架 1.申请内存 当Central Cache向Page Cache申请内存时&#xff0c;Page Cache先检查对应位置有没有span&#xff0c;如果没有则向更大页寻找一个span&#xff0c;如果找到则分裂成两个 比如&#xff1a;申请的是4页page&#xff0c;4页page后面…

【MRI基础】TI反转时间概念

在磁共振成像 (MRI) 中&#xff0c;反转时间 (TI) 是反转恢复脉冲序列中的一个特定参数。它表示施加 180 度反转脉冲&#xff08;将纵向磁化翻转到相反方向&#xff09;与随后的 90 度激励脉冲&#xff08;将磁化翻转到横向平面以创建 MR 信号&#xff09;之间的时间间隔。 MRI…

常见概念 -- 电层业务调制谱宽与光层通道谱宽

本文介绍了“电层业务调制谱宽”和“光层通道谱宽”这两个概念&#xff0c;并结合网管的配置界面解释二者的配置方法。 电层业务调制谱宽 电层业务调制谱宽与光线路码型唯一相关&#xff0c;光线路码型确定后谱宽随之确定。 电层业务调制谱宽是指某业务信号的损耗谱从峰值下…

C++解决:求排列数

描述 输入两个整数m,n&#xff0c;求m个数字中选n个数的排列数。&#xff08;1<n<m<50&#xff09; 输入描述 两个正整数m和n。 输出描述 一个正整数表示排列数。 用例输入 1 6 5 用例输出 1 720 AC code #include<bits/stdc.h> using namespace s…

[linux 驱动]platform总线设备驱动详解与实战

目录 1 描述 2 结构体 2.1 bus_type 2.2 platform_bus_type 2.2.1 platform_match 2.2.2 platform_uevent 2.2.3 platform_dma_configure 2.2.4 platform_dev_pm_ops 2.3 platform_driver 2.4 platform_device 3 platform注册 3.1 platform_driver_register 3.1.1 …

【python因果推断库11】工具变量回归与使用 pymc 验证工具变量4

目录 Wald 估计与简单控制回归的比较 CausalPy 和 多变量模型 感兴趣的系数 复杂化工具变量公式 Wald 估计与简单控制回归的比较 但现在我们可以将这个估计与仅包含教育作为控制变量的简单回归进行比较。 naive_reg_model, idata_reg make_reg_model(covariate_df.assign…

C语言:刷题日志(1)

一.阶乘计算升级版 本题要求实现一个打印非负整数阶乘的函数。 其中n是用户传入的参数&#xff0c;其值不超过1000。如果n是非负整数&#xff0c;则该函数必须在一行中打印出n!的值&#xff0c;否则打印“Invalid input”。 首先&#xff0c;知道阶乘是所有小于及等于该数的…

halcon 自定义距离10的一阶导数幅图,摆脱sobel的3掩码困境

一&#xff0c;为什么要摆脱3的掩码 在处理图像的过程中&#xff0c;会用到平滑算子&#xff0c;很容易破坏边际&#xff0c;所谓的一阶导数sobel只计算掩码为3的差分&#xff0c;在幅度图分割中&#xff0c;往往是很难把握的。 举个例子-现在图像头平滑好了&#xff0c;缺陷…

【Python 千题 —— 算法篇】寻找两个正序数组的中位数

Python 千题持续更新中 …… 脑图地址 &#x1f449;&#xff1a;⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 在处理大规模数据时&#xff0c;我们经常需要对数据进行排序和分析。一个常见问题是如何高效地从两个正序数组中找出它们的中位数。…

今天又学到了——图编号关联章节号,QGIS下载文件存储的瓦片

记录教程来源&#xff1a;​​​​​​【Word图编号关联章节号】图片分章节 编号&#xff0c;图1-1、图2-1_哔哩哔哩_bilibili 上面链接这个实现的是这个效果&#xff1a; word自动目录及章节自动编号教程_哔哩哔哩_bilibili&#xff0c;这个的效果是自己设计多级列表&#xf…

Pr:首选项 - 音频

Pr菜单&#xff1a;编辑/首选项 Edit/Preferences Premiere Pro 首选项中的“音频” Audio选项卡主要作用是控制音频的处理设置&#xff0c;包括音量调整、波形生成、音频渲染等选项&#xff0c;这些设置有助于优化音频的处理和编辑工作&#xff0c;适用于不同的剪辑需求和项目…

【Qt】Qt与Html网页进行数据交互

前言&#xff1a;此项目使用达梦数据库&#xff0c;以Qt制作服务器&#xff0c;Html制作网页客户端界面&#xff0c;可以通过任意浏览器访问。 1、Qt与网页进行数据交互 1.1、第一步&#xff1a;准备qwebchannel.js文件 直接在qt的安装路径里复制即可 1.2、第二步&#xf…

海外云手机是否适合运营TikTok?

随着科技的迅猛发展&#xff0c;海外云手机逐渐成为改变工作模式的重要工具。这种基于云端技术的虚拟手机&#xff0c;不仅提供了更加便捷、安全的使用体验&#xff0c;还在电商引流和海外社媒管理等领域展示了其巨大潜力。那么&#xff0c;海外云手机究竟能否有效用于运营TikT…

Jenkins+Svn+Vue自动化构建部署前端项目(保姆级图文教程)

目录 介绍 准备工作 配置jenkins 构建部署任务 常见问题 介绍 在平常开发前端vue项目时,我们通常需要将vue项目进行打包构建,将打包好的dist目录下的静态文件上传到服务器上,但是这种繁琐的操作是比较浪费时间的,可以使用jenkins进行自动化构建部署前端vue 准备工作 准备…

Java 面试题:通过JProfile排查OOM问题 内存溢出与内存泄漏问题 --xunznux

文章目录 如何通过JProfile排查OOM或内存泄漏问题1、启动工具观测程序执行状态2、使用默认设置采样3、查看memory&#xff0c;Run GC无效4、查看 Live Memory发现两个byte大数组存在5、通过快照查看堆中的内存使用情况6、找到Full GC无法清除的对象通过大对象列表定位内存泄漏问…