多语言展示
当前在线:1036今日阅读:26今日分享:39

GIT学习--(7) GIT基本命令之 reset 详解

这篇经验,我们主要介绍一下 GIT 中 reset 命令,这个命令主要用于删除工作区和暂存区的变更,也可以用于永久删除无效的提交记录!
工具/原料

一台安装了GIT的电脑

方法/步骤
1

首先看一个 git reset 的用法,在实际工作中,有时我们修改了一些东西,并且通过 git add 命令将这些变更加到了暂存区,这时我们想“清空”暂存区(就是将暂存区恢复为原始状态,和当前分支HEAD指向的版本内容一致,无可提交内容),怎么办呢?git reset HEAD (注意 git reset 也可以)命令就能完成你的要求,如图示,我们修改了仓库中文本文件的内容,并且将变更加入了暂存区,然后通过git reset HEAD 的命令恢复了暂存区,但注意这个命令不会对工作区的内容产生任何影响!

2

有时,我们在工作区改了一通,同时也将部分内容添加到了暂存区,但思来想去,算了吧,这些变动通通不要了!那怎么办呢?注意这里需要普及一点知识,当我们目前所处分支的暂存区或工作区有变更未处理时,切换分支命令 git checkout BranchName 是无法操作的(会报错,参考图示,这里想通过切换分支覆盖大量变更的想法是行不通的,另,如果被修改文件在两个分支中的原始版本完全一致,虽然可以切换,但工作区和暂存区的变更仍会被保留)还是 reset 命令来帮忙, git reset --hard 这个命令会直接将工作区和暂存区恢复为原始状态,即两者均和当前分支HEAD指向的版本内容一致!

3

有时,我们修改了多个文件,并且加入到了暂存区中,但在提交时,我们发现有几个文件我们先不想提交了,但其变更还想保存在工作区,其余暂存区的变更还是要提交的,那怎么办呢? git reset -- FileName1 FileName2 命令可以实现你的需求,图示,注意为了演示这个效果,我们在仓库中新添加了两个新的文本文件!注意 git  reset -- 后面有个空格,再是多个文件名称,也要通过空格隔开。

4

有时,我们在一个特定的工作分支上进行了多次修改和提交,但最后从其他同事反馈回来的结果(比如测试团队),这些变更因为需求理解错误,全部要删除,这时一个好的方法是我们基于该分支上这些变更提交前的那个稳定版本创建一个分支,并且以后再这个新分支上工作(那些错误的变更还会被保留在老分支上),但有时我们确实还想在当前分支上工作,也想将这些错误的提交全部抹除掉,那该怎么办呢?  命令 git reset --hard VersionHash(该分支变更前的那个提交版本的hash值) 可以实现你的要求,可以参考图示,其本质其实是将 HEAD 指针重新定位到特定版本上,并且将其后期的提交记录全部删除(工作区、暂存区、HEAD 指针指向的版本全部变更为指定版本)。

注意事项
1

git reset 4种形式:get reset ; git reset --hard ; git reset -- File1 File2 ; git reset --hard VersionHash

2

git reset --hard 这种命令形式都会将你的工作区和暂存区中未提交的内容全部抹除,用的时候一定要小心

推荐信息