【Git 学习三】深入理解git reset 命令
重置命令(git reset)是Git 最常用的命令之一,也是最危险最容易误用的命令。来看看git reset命令用法。
-----------------------------------------------------------------------------------------------------------
用法一:git reset [-q] [<commit>] [--] <paths》.....
用法二:git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
-----------------------------------------------------------------------------------------------------------
上面列出了两个用法,其中<commit>都是可选项,可以使用引用或提交ID,如果省略<commit>则相当于使用了HEAD的指向作为提交ID.
上面列出的两种祖坟的区别在于,第一种用法在命令中包含路径<paths>.为了避免路径和引用(或者提交ID)同名而发生冲突,可以在<paths>前用两个连续的短线(减号)作为分隔。
第一种用法(包含了路径<paths>的用法)不会重置引用,更不会改变工作区,而是用指定提交状态(<commit>)下的文件(<paths>)替换掉暂存区中的文件。例如命令git reset HEAD <paths>相当于取消之前执行的git add <paths>命令时改变的暂存区。
第二种用法(不使用路径<paths>的用法)则会重置引用。根据不同的选项,可以对暂存区或工作区进行重置。参照下面的版本库模型图,来看一看不同的参数对第二种重置语法的影响。
使用参数 --hard, 如:git reset --hard <commit>.
会执行上图中的全部动作1,2,3,即:
1.替换引用的指向。引用指向新的提交ID.
2.替换暂存区。替换后,暂存区的内容和引用指向的目录树一致。
3.替换工作区。替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的目录树内容相同。
使用参数 --soft, 如:git reset --soft <commit>.
会执行上图中的操作1。即只更改引用的指向,不改变暂存区和工作区。
使用参数 --mixed或不使用参数(默认为 --mixed),如:git reset <commit>.
会执行上图中的操作1和操作2.即更改引用的指向及重置暂存区,但是不改变工作区。
下面通过一些示例,看一下重置命令的不同用法。
命令:git reset
仅用HEAD指向的目录树重置暂存区,工作区不会受到影响,相当于将之前用git add命令更新到暂存区的内容撤出暂存区。引用也未改变,因为引用重置到HEAD相当于没有重置。
命令:git reset HEAD
同上
命令:git reset -- filename
仅将文件filename 的改动撤出暂存区,暂存区中其它文件不改变。相当于对命令git add filename 的反操作。
命令:git reset HEAD filename
同上
命令:git reset --soft HEAD^
工作区和暂存区不改变,但是引用向前回退一次。当对最新提交的提交说明或提交的更改不满意时,撤销最新的提交以便重新提交。
命令:git reset HEAD^
工作区不改变,但是暂存区会回退到上一次提交之前,引用也会回退一次。
命令:git reset --mixed HEAD^
同上
命令:git reset --hard HEAD^
彻底撤销最近的提交。引用回退到前一次,而且工作区和暂存区都会回退到上一次提交的状态。自行一次以来的提交全部丢失。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!