Skip to content
Go back

reset

Edit page

reset

修改 HEAD 指针的撤销

image

HEAD 是一个指针,每次 commit 操作都会使其移动至当前最新的提交节点处,通过 reset 命令我们可以让 HEAD 指针往前移动,即撤销上次 commit 操作。

reset 有三个参数,实际上是三个撤销级别:

提供路径的撤销

通过提供路径,我们可以值撤回一部分文件或者文件集合的修改,这种方式不用变动 HEAD 指针,实际上是将文件在 HEAD 、 Index 和 Working Directory 中移动。

git reset file.txt 相当于 git reset --mixed HEAD file.txt 即是从 HEAD 指向的 commit 中获取 file.txt 放到 Index 中。 这可以起到 取消暂存文件 的作用,与 git add 正好相反,利用这一特性,我们可以压缩提交。

压缩提交

我们每天都提交代码,但是并不是每次提交代码都需要保留历史记录的,一些诸如漏提交文件、漏配置项的提交可以被裁剪掉。

image

图中的 file-a.txt v2 是一个未完成状态,可以被裁剪掉,不影响回溯。 可以执行 git reset --soft HEAD~2HEAD 往前移动两个提交的位置,此时状态如下:

image

此时再执行 git commit 把暂存区的文件提交,HEAD 指针便无法回溯到含有 file-a.txt v2 的 commit 节点了。

image

移动分支指向

git reset <branch> 还会移动分支的指向,这个 git checkout 做不到的,下图是在 develop 分支执行 git reset master 分支的结果:

image


Edit page
Share this post on:

Previous Post
merge
Next Post
stash