Git – Reset命令

Reset一词是指撤销修改。git reset 命令被用来重置更改。git reset 命令有三种核心调用形式。这些形式如下。

  • Soft
  • Mixed
  • Hard

如果我们从Git的角度来说,那么Git是一个将HEAD的当前状态重置为指定状态的工具。它是一个复杂的、多功能的撤销修改的工具。它充当了 Git 的时间机器。你可以在各种提交之间来回跳跃。每种重置变化都会影响到git用来处理你的文件内容的特定树。

此外,git reset 可以在整个提交对象或单个文件层面上操作。每种重置方式都会影响到git用来处理你的文件和其内容的特定树。

Git Reset

Git 使用一个索引(暂存区)、HEAD 和工作目录来创建和恢复提交。如果你不知道什么是头、树、索引,那么请访问这里的 Git 索引和 Git 头。

工作目录可以让你修改文件,你也可以分阶段进入索引。分段区可以让你选择你想放到下一次提交中的内容。一个提交对象是一个加密的哈希版本的内容。它有一些元数据和点,用来切换到之前的提交。

让我们了解一下git reset命令的不同用途。

Git Reset Hard

它将首先移动Head,然后用提交的内容更新索引。这是最直接、最不安全、也是最常用的选项。–硬选项会改变提交历史,Ref指针会更新到指定的提交。然后,暂存索引和工作目录需要重新设置,以匹配指定的提交。任何先前等待提交的暂存索引和工作目录都会被重置为与Commit Tree匹配。这意味着任何等待的工作都会丢失。

让我们通过一个例子来理解 –hard 选项。假设我在现有的版本库中添加了一个新的文件。要添加一个新文件到版本库,运行下面的命令。

$ git add <file name>

要检查版本库的状态,运行以下命令。

$ git status

要检查Head和以前的提交状态,请运行下面的命令。

$ git log

考虑一下下面的图片。

Git Reset

在上述输出中,我添加了一个名为 newfile2.txt 的文件。我已经检查了版本库的状态。我们可以看到,当前的头部位置还没有改变,因为我还没有提交修改。现在,我准备执行重置–hard选项。git reset hard 命令的执行方式是。

$ git reset --hard

考虑下面的输出。

Git Reset

正如你在上面的输出中看到的,-hard 选项是在可用的版本库中操作的。这个选项将重置修改,并与最后一次修改前的头的位置相匹配。它将从暂存区删除可用的修改。考虑一下下面的输出。

Git Reset

上面的输出显示的是硬重置后版本库的状态。我们可以看到在我的版本库中没有什么可以提交的,因为所有被硬重置选项删除的修改都与当前 Head 的状态相匹配。所以文件 newfile2.txt 已经从版本库中删除。

在git stash的帮助下,有一个更安全的方法来重置修改。

一般来说,复位硬模式会执行以下操作。

  • 它将移动 HEAD 指针。
  • 它将用HEAD所指向的内容更新暂存区域。
  • 它将更新工作目录,使之与暂存区相匹配。

Git Reset Mixed

混合选项是git reset命令的一个默认选项。如果我们不传递任何参数,那么git reset命令就会把–混合作为默认选项。混合选项会更新 ref 指针。暂存区也会重置为指定提交的状态。撤消的改动会转移到工作目录中。让我们通过一个例子来理解它。

让我们创建一个新的文件,如newfile2.txt。检查版本库的状态。要检查版本库的状态,运行下面的命令。

$ git status

它将显示来自暂存区的未被追踪的文件。把它添加到索引中。要把一个文件添加到阶段性索引中,运行git add命令为。

$ git add <filename>

上述命令将把该文件添加到暂存索引中。考虑一下下面的输出。

Git Reset

在上面的输出中,我在本地版本库中添加了一个newfile2.txt。现在,我们将对这个版本库执行 reset mixed 命令。它的操作方式是

$ git reset --mixed

或者我们可以只使用git reset命令而不是这个命令。

$ git reset

上述命令将重置磁头的状态,它不会从暂存区删除任何数据以匹配磁头的位置。考虑一下下面的输出。

Git Reset

从上面的输出,我们可以看到,我们已经通过执行git reset -mixed 命令,重置了Head的位置。此外,我们还检查了版本库的状态。我们可以看到,版本库的状态并没有因为这个命令而改变。所以很明显,混合模式并没有清除暂存区的任何数据。

一般来说,复位混合模式会执行以下操作。

  • 它将移动 HEAD 指针
  • 它将用HEAD指向的内容更新暂存区。

它不会像git硬模式那样更新工作目录。它只会重置索引,但不会重置工作树,然后生成没有被更新的文件的报告。

如果在命令行中指定了 -N,那么这些语句将被 Git 视为意图添加。

Git Reset Head (Git Reset Soft)

软选项根本不碰索引文件或工作树,但它会像所有选项一样重置头。当 “软 “模式运行时,Refs指针会被更新,重置也就到此为止。它将像git amend命令一样发挥作用。它不是一个权威的命令。有时开发者认为它是浪费时间。

一般来说,它是用来改变头部的位置的。让我们了解一下它是如何改变头部的位置的。它将作为。

$ git reset--soft <commit-sha>

上述命令将把HEAD移到特定的提交处。让我们通过一个例子来理解它。

我在我的文件newfile2.txt中做了修改并提交。因此,Head的当前位置被移到了最新提交的文件上。要检查Head的状态,请运行下面的命令。

$ git log

考虑下面的输出。

Git Reset

从上面的输出中,你可以看到 HEAD 的当前位置是在 f1d4b486f2eeefe575194d51ec3a54926ab05ef7 提交上。但是,我想把它切换到我的老提交 2c5a8820091654ac5b8beed774fe6061954cfe92 上。因为commit-sha号是一个由sha算法提供的唯一数字。要切换HEAD,运行下面的命令。

$ git reset --soft  2c5a8820091654

上述命令将把我的HEAD转移到一个特定的提交。请看下面的输出。

Git Reset

从上面的输出可以看出,HEAD已经通过git reset –soft模式转移到了某个特定的提交。

Git Reset to Commit

有时我们需要重置某个特定的提交;Git 允许我们这样做。我们可以重置到某个特定的提交。要重置它,可以使用git reset命令和reset命令支持的任何选项。它将采用某个特定命令的默认行为,并重置给定的提交。重置提交的语法如下。

$ git reset <option> <commit-sha>

这些选项可以是

  • --soft
  • --mixed
  • --Hard

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程