深入理解 Git Revert、Checkout 和 Reset 的区别

Git 提供了一系列功能强大的命令来管理和操作我们的代码库。在这些命令中,INLINECODEbf6f7f1d、INLINECODE084151aa 和 git reset 是我们经常用于不同场景的三个核心命令。深入理解它们之间的区别对于进行有效的版本控制至关重要。在本文中,我们将深入探讨这三个命令的功能、用法以及它们各自的适用场景。

为了更直观地演示,让我们先创建一个示例 Git 仓库,其中包含一个名为 demo.txt 的文件,文件内容为 Hello Geeks

!image

我们可以看到,目前仓库中只有一个提交,且该提交包含了写有 "Hello Geeks" 的文本文件。现在,让我们向这个文本文件中添加一些新内容。假设我们添加了一行 Hello World. 进行这项修改后,我们的文件现在需要被添加到暂存区(Staging Area)才能完成提交。这些更新目前位于工作区(Working Area),我们可以使用 git status 命令来查看它们的状态。

!image

现在,我们的工作仓库中存在一个未跟踪的修改 Hello World,假设我们需要丢弃这个更改。那么,我们应该使用的命令是——

1. git checkout

git checkout 主要用于丢弃工作仓库中的更改。

> git checkout

!image

当我们执行 git checkout 命令后,再次查看 Git 仓库的状态以及文本文件的内容,我们会发现工作区中的更改已经被丢弃了,文件恢复到了我们之前修改前的状态。

现在,如果我们想取消文件的暂存(即从暂存区移出)该怎么办呢?我们在提交之前会对文件进行暂存,但在某些时候,我们可能决定暂时不提交某些文件的更改。让我们再次向文本文档中添加 Hello World,并使用 git add 命令将其添加到暂存区。

!image

此时我们需要将文件从暂存区移出,为此我们将使用以下命令——

2. git reset

INLINECODE34b39575 用于当我们想要取消文件的暂存状态,并将更改重新放回工作目录时。此外,INLINECODE9b4235e0 也可以用来从本地仓库中删除提交记录。

> git reset HEAD

每当我们取消暂存一个文件时,该文件的所有更改都会被保留在工作区中。

!image

执行后,我们回到了工作目录的状态,我们的修改依然存在,但文件已经不再处于暂存区了。

此外,有时我们可能会有一些不想被提交的提交记录,并希望从本地仓库中将它们移除。为了演示如何从本地仓库中删除提交,让我们把刚才做的更改先暂存并提交,然后再尝试删除那个提交。

!image

现在我们有了 2 个提交,最新的一个是 "Added Hello World" 提交,我们打算将其删除。我们将使用的命令是——

> git reset HEAD~1

>

> 请注意以下几点:

>

> – 这里的 HEAD~1 意味着我们即将删除最顶端的提交,也就是我们最新完成的那次提交。

> – 我们不能利用 INLINECODEb9899463 随意删除某一个特定的提交,例如:我们不能指定删除“第二个”或“第三个”提交,我们只能删除最新的提交、最新的 2 个提交……或是最新的 N 个提交 (INLINECODEaf52a083)。[这里的 n 代表需要删除的最近 n 个提交]。

!image

使用上述命令后,我们可以看到我们的提交已被删除,同时我们的文件再次变为未暂存状态,回到了工作目录中。实际上,git reset 有不同的模式来决定如何保留我们的更改。

  • git reset –soft HEAD~1 此命令会删除提交,但不会将文件从暂存区移出。也就是说,我们的更改仍然会保留在暂存区中。
  • git reset –mixed HEAD~1git reset HEAD~1 – 这是我们在上文中使用的默认模式。它既会删除提交,也会取消文件的暂存状态,并将我们的更改保留在工作目录中。
  • git reset –hard HEAD~1 – 此命令会删除提交,并且同时丢弃工作目录中的所有更改。这通常被称为“破坏性”命令,因为一旦执行,我们将无法找回那些更改,所以使用时务必格外小心。

我们在上文刚刚讨论过,git reset 命令不能用于删除远程仓库中的提交。那么,如果我们要从远程仓库中移除不需要的提交,该怎么办呢?我们需要使用的命令是——

3. git revert

git revert 用于从远程仓库中移除提交(实际上是通过创建一个新的“反向提交”来抵消旧的提交)。由于现在我们的更改已经在工作目录中,让我们先把那些更

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/29166.html
点赞
0.00 平均评分 (0% 分数) - 0