重置一词表示撤消更改。 git reset命令用于重置更改。 git reset命令具有三种核心调用形式。这些形式如下。
Soft
Mixed
Hard
如果我们说的是Git,那么Git是将HEAD的当前状态重置为指定状态的工具。它是用于撤消更改的复杂而通用的工具。它充当Git的时间机器。您可以在各种提交之间来回跳转。这些重置变量中的每一个都会影响git用来处理其内容中的文件的特定树。
此外,git reset可以在整个提交对象或单个文件级别上进行操作。这些重置变量中的每一个都会影响git用于处理文件及其内容的特定树。
Git使用索引(临时区域),HEAD和工作目录来创建和还原提交。如果您不知道什么是头,树,索引,那么请访问此处 Git索引和 Git头。
通过工作目录可以更改文件,也可以进入索引。暂存区域使您可以选择要放入下一次提交的内容。提交对象是内容的加密哈希版本。它具有一些用于打开先前提交的元数据和点。
让我们了解git reset命令的不同用法。
Git Reset Hard
它将首先移动Head并使用提交的内容更新索引。这是最直接,最不安全且最常用的选项。--hard选项更改提交历史记录,并且将引用指针更新为指定的提交。然后,需要重置暂存索引和工作目录以匹配指定提交的索引和工作目录。之前暂存的对暂存索引的提交和工作目录都将重置为匹配提交树。这意味着所有等待的工作都将丢失。
让我们通过示例了解--hard选项。假设我已将一个新文件添加到现有存储库中。要将新文件添加到存储库,请运行以下命令:
要检查存储库的状态,请运行以下命令:
要检查Head和先前提交的状态,请运行以下命令:
请考虑以下图片:
在上面的输出中,我添加了一个名为 newfile2.txt 的文件。我已经检查了存储库的状态。我们可以看到当前的头部位置尚未更改,因为我尚未提交更改。现在,我将执行重置--hard 选项。 git reset hard命令的执行方式为:
请考虑以下输出:
如您在上述输出中看到的,-hard选项在可用存储库上操作。此选项将重置更改并匹配上一次更改之前的Head位置。它将从登台区域中删除可用的更改。考虑以下输出:
上面的输出显示了经过艰苦工作后仓库的状态重启。我们可以看到我的存储库中没有要提交的内容,因为通过reset hard选项删除的所有更改都将其与当前Head的状态匹配。因此,文件 newfile2.txt 已从存储库中删除。
在的帮助下,有一种更安全的方式来重置更改。 git stash 。
通常,硬重置模式执行以下操作:
它将移动HEAD指针。
它将用HEAD指向的内容更新暂存区。
它将更新工作目录以匹配暂存区。
Git Reset Mixed
混合选项是git reset命令的默认选项。如果我们不传递任何参数,则将git reset命令视为-mixed 作为默认选项。混合选项将更新ref指针。登台区域还重置为指定提交的状态。撤消的更改已传输到工作目录。让我们通过一个例子来理解它。
让我们创建一个名为 newfile2.txt 的新文件。检查存储库的状态。要检查存储库的状态,请运行以下命令:
它将显示暂存区域中未跟踪的文件。将其添加到索引。要将文件添加到阶段索引中,请运行git add命令:
上面的命令会将文件添加到暂存索引。考虑以下输出:
在上面的输出中,我添加了 newfile2 .txt 到我的本地存储库。现在,我们将在此存储库上执行reset mixed命令。它将运行为:
或者我们只能使用git reset命令代替此命令。
以上命令将重置磁头的状态,并且不会从暂存区域中删除任何与磁头位置匹配的数据。考虑以下输出:
从上面的输出中,我们可以看到我们已经重置了通过执行git reset-mixed命令来调整Head的位置。另外,我们已经检查了存储库的状态。如我们所见,此命令尚未更改存储库的状态。因此很明显,混合模式不会清除暂存区域中的任何数据。
通常,重置混合模式执行以下操作:
它将移动HEAD指针
它将用HEAD指向的内容更新暂存区。
它不会像git hard模式那样更新工作目录。它将仅重置索引,而不重置工作树,然后生成尚未更新的文件的报告。
如果在命令行上指定-N,则该语句将被视为
Git重置头(Git重置软)
soft选项根本不涉及索引文件或工作树,但它会像所有选项一样重置Head。当软模式运行时,refs指针将更新,并且重置将在此处停止。它将充当git amend命令。这不是权威命令。有时开发人员认为这是浪费时间。
通常,它用于更改Head的位置。让我们了解一下它将如何改变Head的位置。它将用作:
$ git reset--soft <commit-sha>
上面的命令会将HEAD移动到特定的提交。让我们用一个例子来理解它。
我已经在文件newfile2.txt中进行了更改并提交。因此,Head的当前位置在最近一次提交时发生了移位。要检查Head的状态,请运行以下命令:
考虑以下输出:
从以上输出中,您可以看到HEAD的当前位置在f1d4b486f2eeefe575194d51ec3a54926ab05ef7 commit上。但是,我想在我的旧提交2c5a8820091654ac5b8beed774fe6061954cfe92上切换它。由于commit-sha编号是sha算法提供的唯一编号。要切换HEAD,请运行以下命令:
$ git reset--soft 2c5a8820091654
上面的命令会将我的HEAD移至特定的提交。考虑下面的输出:
从上面的输出中可以看到,HEAD已经
Git重置为提交
有时我们需要重置特定的提交; Git允许我们这样做。我们可以重置为特定的提交。要重置它,可以将git reset命令与reset命令支持的任何选项一起使用。它将采用特定命令的默认行为并重置给定的提交。重置提交的语法如下:
$ git reset <option> <commit-sha>
这些选项可以是
--soft
--mixed
--Hard