git版本管理命令—— git reset 用法

git reset 的简单入门

前置基础:了解 git 中 版本库(HEAD 文件树),暂存区(INDEX),工作区(WORKSPACE)相关概念;知道 git 基础命令的使用,如:git init,git commit,git add;了解基本 Linux 文件操作。
实验准备:

# 创建实验用本地 git 仓库 “learn”
# 进入 git 仓库,进行以下操作,获得实验用环境(三个历史记录)
git init
echo 'v1' > test
git add .
git commit -m 'v1'
echo 'v2' > test
git add .
git commit -m 'v2'
echo 'v3' > test
git add .
git commit -m 'v3'
# 由此,我们能获得如下文件树
<center class="half">
<img src="https://i-blog.csdnimg.cn/direct/5ce35722b62e4219a97d1b5f3d92502c.png" height=150/>
<img src="https://i-blog.csdnimg.cn/direct/2227c425f5554289b3d2b3787a8173be.png" height=150/>
</center>
本文聚焦:
- git reset 的三大重要选项(--soft,--mixed,--hard)的区别,以及在三者版本管理时的运用;
- HEAD 指针的相关操作,如何回退到特定版本。
  1. 作用:通过管理三个文件树(HEAD,index,workspace)的文件,实现版本的回退。

  2. 语法格式:git reset [–soft | --mixed | --hard | … ] [HEAD]

    • git reset:命令主体
    • [–soft | --mixed | --hard | … ]:命令选项,决定命令的影响程度
    • [HEAD]:头指针要移动到的位置

      相对位置:
      HEAD,当前位置;
      HEAD^,当前位置的前一位;
      HEAD^2,当前位置前两位;(或 HEAD^^)
      ……。(上述 ^ 可改为 ~)
      版本号:
      利用 git log 查找特定版本的版本号(或利用 vscode 插件 git graph),通过该版本号回退到对应版本
      id 号:
      使用 git tag 命令打标签,同样可以定位版本,此处暂不细谈

  3. 三大选项
    --soft:只移动 HEAD ,不影响 index 与 workspace 中的文件图解如下
    image-20240801053611795

    如下是执行了 git reset --soft HEAD^ 的版本树图

    可见,master的 HEAD 回退了一格(版本库中的 v3 本清除)
    请添加图片描述

    用 git status 查询状态,可见,暂存区的 v3 变更仍处于待提交状态,即为影响到暂存区,我们可以很方便的使用 git commit -m ‘v3’ 将 v3 还原。
    请添加图片描述

    我们使用 cat 查看文档内容,仍是 v3 ,可见 命令也没影响到工作区。
    重新还原 v3 继续实验。
    --mixed:这是 git reset 的默认选项,移动 HEAD,同时将 INDEX 清除
    image-20240801054206314

如下是执行了 git reset HEAD^ 的版本树图

git status

在这里插入图片描述

发现,缓存区的 test 与 workspace 不一致

git diff

请添加图片描述

v3 缓存被清除,缓存区回退到 v2 ,“红色”表示工作区与暂存区不一致
利用以下命令查看 工作区 的文件情况

cat test

请添加图片描述

如果要重新提交 v3 需利用 git add 同步“工作区”与“暂存区”

git add .
git commit -m "v3"

--hard:同时改变 HEAD INDEX WORKSPACE
image-20240801054338769

版本树如下

git status

请添加图片描述

由于 缓存区 工作目录 HEAD 相同,系统判定“无更改”

cat test

请添加图片描述

可见工作目录的文件被更改了。
由此可见,一但使用 --hard,就丢失了任何 v3 的更改,无法挽回,必须慎用!!!
4. HEAD 巧用

git reset HEAD $FileName

请添加图片描述

用于撤回对 $FileName 的 git add 操作,使得 git commit 不会将它一起提交。
git reset HEAD $FileName 使用前
使用后请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值