📜  Git重置

📅  最后修改于: 2020-12-13 15:18:31             🧑  作者: Mango

Git重置

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

  • 柔软的
  • 混合的

如果我们说的是Git,那么Git是将HEAD的当前状态重置为指定状态的工具。它是用于撤消更改的复杂而通用的工具。它充当Git的时间机器。您可以在各种提交之间来回跳转。这些重置变体中的每一个都会影响git用于在其内容中处理文件的特定树。

另外,git reset可以对整个提交对象或单个文件级别进行操作。这些重置变量中的每一个都会影响git用于处理文件及其内容的特定树。

Git使用索引(临时区域),HEAD和工作目录来创建和还原提交。如果您不知道什么是Head,树木,索引,请在此处访问Git IndexGit Head

工作目录使您可以更改文件,并且可以进入索引。暂存区域使您可以选择要在下一次提交中放入的内容。提交对象是内容的加密哈希版本。它具有一些用于打开先前提交的元数据和点。

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

Git重设硬

它将首先移动Head并使用提交的内容更新索引。这是最直接,最不安全且最常用的选项。 –hard选项更改提交历史记录,并且将引用指针更新为指定的提交。然后,需要重置暂存索引和工作目录以匹配指定提交的索引和工作目录。之前暂存的对暂存索引的提交和工作目录都将重置为匹配提交树。这意味着任何等待的工作都将丢失。

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

$ git add 

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

$ git status

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

$ git log

考虑下图:

在上面的输出中,我添加了一个名为newfile2.txt的文件。我已经检查了存储库的状态。我们可以看到当前的头部位置尚未更改,因为我尚未提交更改。现在,我将执行reset –hard选项。 git reset hard命令将执行为:

$ git reset --hard

考虑以下输出:

如您在上面的输出中看到的,-hard选项在可用存储库上操作。此选项将重置更改并匹配上一次更改之前的Head位置。它将从登台区域中删除可用的更改。考虑以下输出:

上面的输出显示硬重置后存储库的状态。我们可以看到我的存储库中没有任何要提交的内容,因为reset hard选项删除了所有更改,以使当前Head的状态与前一个Head的状态相匹配。因此,文件newfile2.txt已从存储库中删除。

在git stash的帮助下,有一种更安全的方式来重置更改。

通常,硬重置模式执行以下操作:

  • 它将移动HEAD指针。
  • 它将使用HEAD指向的内容更新暂存区。
  • 它将更新工作目录以匹配暂存区。

Git重置混合

混合选项是git reset命令的默认选项。如果我们不传递任何参数,则将git reset命令视为–mixed作为默认选项。混合选项将更新ref指针。登台区域还重置为指定提交的状态。撤消的更改已传输到工作目录。让我们通过一个例子来理解它。

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

$ git status

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

$ git add 

上面的命令会将文件添加到暂存索引。考虑以下输出:

在上面的输出中,我向本地存储库添加了一个newfile2.txt。现在,我们将在此存储库上执行reset mixed命令。它将作为:

$ git reset --mixed

或者我们只能使用git reset命令代替此命令。

$ git reset

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

从上面的输出中,我们可以看到通过执行git reset -mixed命令已重置Head的位置。另外,我们已经检查了存储库的状态。如我们所见,此命令尚未更改存储库的状态。因此很明显,混合模式不会清除暂存区域中的任何数据。

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

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

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

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

Git重置头(Git重置软)

soft选项完全不接触索引文件或工作树,但与所有选项一样,它会重置Head。当软模式运行时,refs指针将更新,并且重置将在此处停止。它将充当git amend命令。这不是权威命令。有时,开发人员认为这是浪费时间。

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

$ git reset--soft 

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

我已经在文件newfile2.txt中进行了更改并提交。因此,Head的当前位置在最近一次提交时发生了移位。要检查Head的状态,请运行以下命令:

$ git log

考虑以下输出:

从上面的输出中,您可以看到HEAD的当前位置在f1d4b486f2eeefe575194d51ec3a54926ab05ef7 commit上。但是,我想在我的旧提交2c5a8820091654ac5b8beed774fe6061954cfe92上切换它。由于commit-sha编号是sha算法提供的唯一编号。要切换HEAD,请运行以下命令:

$ git reset --soft  2c5a8820091654

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

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

Git重置以提交

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

$ git reset 

这些选项可以是

  • – 柔软的
  • -混合
  • – 硬