解释 Git 中 reset 命令的工作原理


commit 命令会隐式地移动分支的 HEAD 指针。下图显示,最初 HEAD 指向提交 c1。每次提交操作后,HEAD 指针都会移动到新的提交。我们可以使用 HEAD 指针或提交哈希值执行重置。


git reset 命令将显式或强制地将分支的 HEAD 指针移动到特定的提交。

重置 HEAD 指针时,我们有 3 个选项:

  • 软重置 (Soft)
  • 混合重置 (Mixed)
  • 硬重置 (Hard)

硬重置

执行硬重置时,git 会将提交快照复制到工作区和暂存区。因此,在执行硬重置之前在当前工作目录或暂存区中所做的任何更改都将丢失。使用 HEAD 指针执行硬重置的语法如下:

git reset --hard HEAD~<i>

其中,i 是要向后移动的提交次数。

例如,以下命令将 HEAD 指针向后移动 2 次提交:

git reset --hard HEAD~2

下图显示执行上述命令后 HEAD 指针的位置。

由于提交现在指向 c1,其他提交 c2c3 将被垃圾回收。

混合重置

这是重置的默认选项。混合重置仅将快照从存储库复制到暂存区。因此,工作区中的当前更改将保持不变。

使用 HEAD 指针执行硬重置的语法如下:

git reset --mixed HEAD~<i>

其中,i 是要向后移动的提交次数。

例如,以下命令将 HEAD 指针向后移动 2 次提交:

git reset --mixed HEAD~2

在我们的示例中,混合重置后 HEAD 指针的位置如下图所示。

软重置

当我们执行软重置时,提交快照不会被复制到暂存区或工作区。它只会将 HEAD 显式地移动到该提交。工作区和暂存区中的所有更改将保持不变。

使用 HEAD 指针执行硬重置的语法如下:

git reset --soft HEAD~<i>

其中,i 是要向后移动的提交次数。

例如,以下命令将 HEAD 指针向后移动 2 次提交:

git reset --soft HEAD~2

在我们的示例中,混合重置后 HEAD 指针的位置如下图所示:

更新于:2021年4月30日

845 次查看

开启你的 职业生涯

完成课程获得认证

开始学习
广告