Git应用详解第四讲:版本回退的三种方式与stash

本文详细介绍了Git的版本回退操作,包括通过、和命令的使用,以及与的区别。此外,还深入探讨了的功能,如何保存未提交的修改,并在需要时恢复。文章通过实例演示了各种操作,帮助读者掌握版本控制的精髓。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

前情提要:Git应用详解第三讲:本地分支的重要操作

git作为一款版本控制工具,其最核心的功能就是版本回退,没有之一。熟悉git版本回退的操作能够让你真真正正地放开手脚去开发,不用小心翼翼,怕一不小心删除了不该删除的文件。本节除了介绍版本回退的内容之外,还会介绍stash的使用。

一、版本回退

git中永远有后悔药可吃,总是可以回到版本库的某一个时刻,这就叫做版本回退

image-20200406144058526

如上图所示:当前master分支指针指向D,通过版本回退可以使master指向CBA。进行版本回退的命令大体上有三种:resetrevertcheckout。下面就来一一讲解:

Ⅰ.git reset

1.参数

reset命令可以添加很多参数,常用的有--mixed--soft--hard三种。下图为一次完整提交的四个阶段:

image-20200412192613526

三个参数大体上的区别为:

  • --mixed:为默认值,等同于git reset。作用为:将文件回退到工作区,此时会保留工作区中的文件,但会丢弃暂存区中的文件;
  • --soft:作用为:将文件回退到暂存区,此时会保留工作区暂存区中的文件;
  • --hard:作用为:将文件回退到修改前,此时会丢弃工作区暂存区中的文件;

下面就来详细地讲解它们的使用方法:

首先在master分支进行四次提交,每次提交在test.txt中添加一行文本信息:

image-20200406164503683

--mixed

该参数为默认值,作用为:将文件回退到工作区中:如下图所示,将test.txt文件回退一次提交:

image-20200412194811197

可以看到第四次提交对test.txt的修改操作被回退到了工作区当中,并且保留了工作区中第四次提交对test.txt所做的修改,所以工作区中的test.txt文件内容与回退前一致。

--soft

该参数的作用为:将文件回退到暂存区中:如下图所示,将test.txt文件回退一次提交:

image-20200412195321082

可以看到第四次提交对test.txt的修改操作被回退到了暂存区当中,并且保留了工作区和暂存区中第四次提交对test.txt所做的修改,所以,工作区中的文件内容与回退前一致。

--hard

该参数的作用为:将文件回退到修改前:如下图所示,将test.txt文件回退一次提交:

image-20200412205112201

可以看到test.txt直接回到了进行第四次提交前,此时删除了工作区和暂存区中第四次提交对test.txt所做的修改。所以,工作区变得干净了,test.txt文件内容回退到刚完成第三次提交时。

2.写法

为了方便演示reset的各种使用方法,下面的指令都采用--hard参数。

git reset --hard HEAD^

该命令的作用为回退一次提交:

image-20200406164628192

回退后的状态为:

image-20200406164713774

可以看到,该方法会同时改变了HEADmaster指针的指向;

git reset --hard HEAD^^

该命令的作用为回退两次提交:

image-20200406170323254

回退后的状态为:

image-20200406170352024

同样,使用--hard参数回退,工作区是干净的;可以看到,该方法也会同时改变HEADmaster指针的指向;

git reset --hard HEAD~n

该命令的作用为回退n次提交:

image-20200406203027868

可以看到使用了--hard参数,回退结果符合预期,并且该方法也会同步修改HEAD和分支master指针的指向。

注意:该方式只能向前回退,不能向后回退

上述命令中的HEAD可以更换为分支名,比如master

git reset --hard master~n

该命令表示将master分支回退n次提交。由于HEAD始终指向当前分支,所以使用分支名和使用HEAD效果是一样的。

git reset --hard commit_id

**该指令的作用为回退到指定的commit id的提交版本;由于commit id是不会重复的,一般只需要写前几(6)位就可以识别出来。通过commit id的回退方式既可以向前回退,也可以向后回退。**如下所示,从1st commit往后回退到4th commit,其中4th commitcommit id = bdb373...

为了熟悉该指令,我们分两种方式进行回退:使用--hard参数与使用默认参数。

  • 使用--hard参数

    image-20200406193422130

    从图中可以看出:通过第四次提交的commit_id: bdb373顺利地从第一次提交向后回退到了第四次提交,并且工作区干净。该方法也同时修改了HEAD和分支master的指向,具体过程为:

    image-20200414171228274

  • 使用默认参数

    image-20200406193005200

    可以看到切换回了4th commit,但是工作区的test.txt文件并没有变化;这是因为,在4th -> 1st的过程中,需要在工作区中删除test.txt文件中的2nd line、3rd line、4th line。通过默认参数--mixed

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值