常用场景:当你在工作的时候发现之前commit的提交的代码有问题,你想
撤回在本地commit提交,最简单的方法就是git reset
下面介绍下git reset的原理和常用的option参数;
git reset就是可以让HEAD这个指针指向其他的节点。比如我们有一次commit不是不是很满意,需要回到上一次的Commit里面。那么这个时候就需要通过reset,把HEAD指针指向上一次的commit的点。

在介绍常用参数之前,先复习下之前关于本地git add commit 的流程,本地git区域总体分为三块:
- Working Tree 工作区
- index/Stage 暂存区,和git stash命令暂存的地方不一样。使用git add xx,就可以将xx添加近Stage里面
- Respository 提交历史,即是你git commit 的历史

文件存入Repository流程:
文件更改->提交暂存->提交到respository。
-
刚开始的时候,working tree 、 index 与 repository(HEAD)的文件是一样的。

-
当git管理的文件夹里面的内容出现改变后,此時 working tree 的內容就会跟 index 及 repository(HEAD)的不一致,而Git知道是哪些文件(Tracked File)被改动过,直接将文件状态设置为 modified (Unstaged files)。

-
当我们git add 后,工作区的文件提交到暂存区,文件状态(staged),所以此时working tree跟index的內容是一致的,但他们与repository(HEAD)內容不一致。

-
当我们git commit,把暂存区的文件提交到Repository(HEAD)后,创建新的节点(HEAD)。建立出新的 commit 节点(HEAD)后, working tree 、 index 與与repository(HEAD)区域的内容 又会保持一致。

git reset 参数
git reset [--hard|soft|mixed|merge|keep]
git reset [–hard|soft|mixed|merge|keep] [或HEAD]:将当前的分支重设(reset)到指定的或者HEAD(默认,如果不显示指定,默认是HEAD,即最新的一次提交),并且根据[mode]有可能更新索引和工作目录。
1. git reset --hard
没有指定节点, 默认把 HEAD指针移动到最新的一次提交,然后重置工作区和暂存区,清除所有改动。
2. git reset --soft
会在重置 HEAD 和 branch 时,保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区。
--soft 和 --hard 的区别:--hard 会清空工作目录和暂存区的改动,*而 --soft则会保留工作目录的内容,并把因为保留工作目录内容所带来的新的文件差异放进暂存区。
3. git reset --mixed
reset 如果不加参数,那么默认使用 --mixed 参数。它的行为是:保留工作目录,并且清空暂存区。也就是说,工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录。简而言之,就是「把所有差异都混合(mixed)放在工作目录中」。
参考: Git Reset 三种模式 作者:carway
本文深入解析GitReset命令的原理与应用场景,详细介绍其四种模式(--hard, --soft, --mixed, --merge)的工作方式,帮助读者理解如何有效利用GitReset进行代码回滚与版本控制。
1320

被折叠的 条评论
为什么被折叠?



