Git reset重置命令

重置(Reset)一词代表撤消改变。git reset命令用于重置改变。git reset命令有三种核心形式的调用。这些形式如下。

  • 轻松(Soft)
  • 混合(Mixed)
  • 硬(Hard)

如果以Git的角度来说,Git是一种将当前的HEAD状态重置为指定状态的工具。它是一种复杂而多样化的撤消改变的工具。它像Git的时间机器一样,你可以在各种提交之间来回跳转。每个重置变体都会影响git用于处理文件内容的特定树。

此外,git reset可以在修改的整个提交对象上操作,也可以在单个文件级别上操作。每个重置变体都会影响git用于处理文件和其内容的特定树。

Git reset重置命令

Git使用索引(暂存区)、HEAD和工作目录来创建和撤销提交。如果你对Head、树、索引一无所知,请访问这里的 Git索引 和 Git Head 。

工作目录允许您更改文件,并且您可以将其暂存到索引中。暂存区使您可以选择将要放入下一个提交中的内容。提交对象是内容的加密哈希版本。它具有用于切换到先前提交的一些元数据和指针。

让我们了解git reset命令的不同用法。

Git Reset Hard

它首先将Head移动并更新索引以包含提交的内容。这是最直接、不安全且经常使用的选项。–hard选项更改提交历史,并更新参考指针以指向指定的提交。然后,暂存区和工作目录需要重置以匹配指定提交的内容。之前在暂存区和工作目录中待处理的提交将被重置以匹配提交树。这意味着任何未完成的工作都将丢失。

让我们通过一个例子来了解–hard选项。假设我已经向现有存储库添加了一个新文件。要将一个新文件添加到存储库,请运行以下命令:

$ git add <file name>

要检查存储库的状态,请运行以下命令:

$ git status

要检查头和先前提交的状态,请运行以下命令:

$ git log

考虑以下图像:

Git reset重置命令

在上面的输出中,我添加了一个名为 newfile2.txt 的文件。我已经检查了仓库的状态。我们可以看到当前的头指针位置还没有改变,因为我还没有提交修改。现在,我将执行 reset –hard 选项。git reset hard命令将被执行为:

$ git reset --hard

请考虑下面的输出信息:
Git reset重置命令

如您所见,上面的输出显示,-hard选项是在可用的存储库上操作的。此选项将重置更改并将位置匹配到上一次更改之前的Head。它将从暂存区中删除可用的更改。请参考以下输出:

Git reset重置命令

上述输出显示了硬重置后仓库的状态。我们可以看到我的仓库中没有需要提交的更改,因为通过硬重置选项将当前 HEAD 的状态与之前的状态匹配,所有的更改都被移除了。所以文件 newfile2.txt 已经从仓库中移除。

有一种更安全的方法可以通过 git stash 来重置更改。

一般来说,硬重置模式执行以下操作:

  • 它会移动 HEAD 指针。
  • 它会将暂存区更新为 HEAD 所指向的内容。
  • 它会将工作目录更新为与暂存区匹配的状态。

Git Reset Mixed

mixed 是 git reset 命令的默认选项。如果我们不传递任何参数,那么 git reset 命令会默认使用 mixed 选项。mixed 选项会更新引用指针,并将暂存区重置为指定提交的状态,已撤销的更改会传输到工作目录中。让我们通过一个示例来理解。

让我们创建一个新文件,比如 newfile2.txt 。检查仓库的状态。要检查仓库的状态,请运行以下命令:

$ git status

它将显示暂存区中未跟踪的文件。将其添加到索引中。要将文件添加到暂存区索引中,请运行git add命令,如下所示:

$ git add <filename>

上述命令将文件添加到暂存区。请参考以下输出:

Git reset重置命令

$ git reset --mixed

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

$ git reset

上面的命令将重置Head的状态,并且不会删除任何与Head位置匹配的暂存区数据。考虑下面的输出:

Git reset重置命令

从上面的输出中,我们可以看到我们通过执行git reset -mixed命令重置了Head的位置。此外,我们还检查了仓库的状态。如我们所见,该命令没有改变仓库的状态。因此可以清楚地看出,混合模式不会清除暂存区的任何数据。

通常,混合模式执行以下操作:

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

不像git hard模式那样更新工作目录。它只会重置索引而不是工作树,然后生成未更新的文件报告。

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

Git Reset Head(Git Reset Soft)

软选项不会对索引文件或工作树进行任何操作,但它会像所有选项一样重置Head。当运行软模式时,引用指针将会更新,重置就会停在那里。它的作用类似于git amend命令。这不是一条权威的命令。有时开发者认为这是浪费时间。

通常,它用于更改Head的位置。让我们了解一下它如何改变Head的位置。它将使用如下:

$ git reset--soft <commit-sha>

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

我对文件newfile2.txt进行了更改并提交了。所以,Head的当前位置被移动到最新的提交上。要检查Head的状态,请运行以下命令:

$ git log

考虑以下输出:

Git reset重置命令

从上面的输出中,您可以看到当前 HEAD 的位置是在 f1d4b486f2eeefe575194d51ec3a54926ab05ef7 提交上。但是,我想将其切换到我旧的提交 2c5a8820091654ac5b8beed774fe6061954cfe92 上。由于提交 SHA 号是由 SHA 算法生成的唯一号码。要切换 HEAD,请运行以下命令:

$ git reset --soft  2c5a8820091654

以上命令将把我的HEAD移到特定的提交。考虑下面的输出:

Git reset重置命令

如上所示,通过git reset –soft模式,HEAD已经转移到了一个特定的提交。

Git重置到提交

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

$ git reset <option> <commit-sha>

这些选项可以是:

  • --soft
  • --mixed
  • --hard

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程