Git重置如何工作?

想知道Git reset选项如何工作?

在关于Envato Tuts +的一系列Git课程中 ,我通过简单的视频介绍了Git的一些基本概念。

在该系列的视频中,您将学习有关Git重置的所有信息。 您将看到如何使用每种重置以及这些变种如何与三棵Git树交互:

  • soft :仅更改HEAD,但不更改索引文件或工作文件中的暂存文件。
  • 混合 :移动HEAD并使用HEAD现在指向的修订内容更新索引。
  • hard :移动HEAD并更新索引和工作目录-这是可能导致数据丢失的唯一版本的reset。

我还将向您展示如何在单个文件上使用git reset

Git基础知识:重置

Git重置如何工作

Git重置。 它有什么作用? 这是您撤消计算机本地某些更改的方式。 完成一些需要倒带的工作后,将其重置为您的朋友。 您可以重新开始。 您可以在各种提交的内容之间来回跳转,并花费一些时间。

Git重置如何工作?

您可以通过git reset使用一些选项。 您可以进行硬性,软性和混合性操作,还可以操作和保留提交对象或在单个文件级别执行操作。

这三个变体中的每一个都会影响git用来处理文件及其内容的特定树。

Git重置如何影响三棵树

隐喻地讲,每个reset选项都会改变一棵不同的树,这是git保存快照的不同部分。

树木,我们在这里谈论什么? Git使用工作目录,索引(也称为暂存区)和称为HEAD的东西来创建和检索提交。

Git重置如何工作?

工作目录使您可以更改可转入索引的文件。 该暂存区域使您可以微调并选择要放入下一次提交的内容。 提交对象是您内容的加密哈希版本。 它添加了一些元数据,并指向以前的提交,这使我们可以进行时间旅行。

HEAD是指向此类提交对象的引用。 它只是一个随分支的每个新提交或更改而更新的指针。 您可以移动它,并使用commit对象定位任何时间点。

解释了不同的重置选项

现在让我们看一下不同的选项。

Git重置-困难

这整个九码。 它将首先移动HEAD,并使用现在指向的HEAD的内容更新索引。 然后它将用索引的内容更新工作目录,从而可能破坏您在工作目录中更改的内容。

Git重置如何工作?

因此,如果您不知道自己在做什么,那么这是唯一的git reset版本会有些危险。

Git重置-混合

这将移动HEAD并使用HEAD未指向的所需提交的内容更新索引。 工作目录不受该操作的影响。

Git重置如何工作?

如果您不提供git reset选项,则默认为Mixed选项。 它始终是工作目录安全的,因此不必担心丢失您的工作。

Git重置--- soft

此选项只会移动HEAD并在此处停止。 实际上,这将撤消最后的git commit命令。

Git重置如何工作?

可能暂存的工作目录和文件仍不受该操作的影响。

使用文件路径

使用git reset的所有这些选项,您可以明确地告诉git从何处停止重放,倒回先前提交中的内容和文件,以指定要影响的树。 我们可以更进一步,并使用文件路径重置程序。

如果使用路径,Git将不会移动HEAD。 为什么? 因为HEAD指向提交对象,并且不能仅指向该对象的子集。 换句话说,HEAD并不指向特定文件,而是指向由块文件和一些元数据组成的对象。 另一方面,索引和工作目录可以按多种方式进行寻址。

使用路径时,只有索引和工作目录起作用。 它只是将文件的内容复制到索引中,而不能做其他事情。 git reset some-file.ext假定默认情况下,您的意思是git reset --mixed HEAD some-file.ext ,不会影响工作目录。

顺便说一下,因为HEAD无法移动,所以soft选项将毫无意义。 假设您一直在处理文件的版本3,并将其添加到索引中以供下一个注释。 现在,您要取消这些更改。 运行git reset some-file.ext取消git reset some-file.ext该特定文件。

Git重置如何工作?

结果,索引将由版本2中文件的状态填充,该版本是HEAD指向的最后一次提交的版本。 您在文件(基本上是版本3)中所做的更改仍在工作目录中可用。 您仍然可以对这些文件的阶段3进行这些更改。

Git重置如何工作?

因此,使用git reset some-file.ext实际上是只操作索引。

重置与结帐

git reset --hard some-file.ext呢? 为什么我们也不能使用它呢?

此功能通过使用文件名的git checkout来完成。 git checkout some-file.ext实际上是git reset --hard some-file.ext会做的,但是Git不允许我们使用hard选项。

让我们更进一步。 我们可以针对任何提交来重置特定文件,而不仅仅是HEAD代表的最新提交。 这会将索引中的目标文件重置为某个提交的状态,而又不会影响工作目录或任何提交。

将索引重置为某个提交的状态(进行向后更新)后,可以使用git checkout和文件git checkout索引的内容签出到工作目录中。

Git重置如何工作?

为什么要使用结帐? 因为git reset --hard文件不是Git可以做的。

但小心点。 git checkout与文件路径一起使用将摆脱工作目录中的最新更改,并将其替换为该特定提交中的文件版本。

观看更多Git课程

如果您觉得这很有用,为什么不查看更多Git课程呢?

您可以观看我们的Git和GitHub简介,或尝试本系列的其他Coffee Break课程:

翻译自: https://code.tutsplus.com/tutorials/how-does-git-reset-work--cms-28410