📜  Git – Git Revert、Checkout 和 Reset 之间的区别

📅  最后修改于: 2022-05-13 01:58:10.762000             🧑  作者: Mango

Git – Git Revert、Checkout 和 Reset 之间的区别

在某些情况下使用 Git 时,我们希望撤消工作区域或索引区域中的更改,有时会在本地或远程删除提交,我们需要撤消这些更改。有 3 种不同的方法可以撤消存储库中的更改,它们是git resetgit checkoutgit revert 。 git checkout 和 git reset 实际上可用于操作提交或单个文件。这些命令可能会令人困惑,因此找出它们之间的区别并了解在特定时间点应该使用哪个命令非常重要。

让我们创建一个示例 git 存储库,其中包含文件demo.txt和“ Hello Geeks ”。

我们可以看到我们已经完成了一次提交,并且已经提交了带有 Hello Geeks 的文本文档。现在让我们在文本文档中添加更多文本。让我们添加另一行Hello World。进行此更改后,现在需要将我们的文件添加到暂存区域以完成提交。此更新目前在工作区域中,要查看它们,我们将看到那些使用git status的更新。

现在我们有一个更改Hello World ,它在我们的工作存储库中未跟踪,我们需要丢弃此更改。所以,我们应该在这里使用的命令是——

1.git结账

git checkout 用于丢弃工作存储库中的更改。

当我们编写 git checkout 命令并查看我们的 git 存储库的状态以及文本文档时,我们可以看到我们的更改正在从工作目录中丢弃,我们再次回到我们之前拥有的测试文档。现在,如果我们想取消暂存文件怎么办。我们在提交文件之前暂存文件,并且在某个时刻,我们可能想要取消暂存文件。让我们再次将Hello World添加到我们的文本文档中,并使用git add命令暂存它们。

我们想要取消暂存文件,我们将用于取消暂存文件的命令是 -

2 . git 重置

当我们想要取消暂存文件并将我们的更改带回工作目录时使用 git reset 。 git reset 也可用于从本地存储库中删除提交。

每当我们取消暂存文件时,所有更改都保存在工作区中。

我们回到工作目录,我们的更改存在,但文件现在未暂存。现在还有一些我们不想提交的提交,我们想从本地存储库中删除它们。要查看如何从本地存储库中删除提交,让我们暂存并提交我们刚刚所做的更改,然后删除该提交。

我们现在有 2 个提交,最新的是添加的 Hello World 提交,我们将删除它。我们现在要使用的命令是——

使用上述命令后,我们可以看到我们的提交被删除了,而且我们的文件再次被取消暂存并返回到工作目录。 git reset 可以通过不同的方式实际保留您的更改。

  • git reset –soft HEAD~1此命令将删除提交但不会取消暂存文件。我们的更改仍将在暂存区。
  • git reset –mixed HEAD~1git reset HEAD~1 –这是我们在上面的示例中使用的默认命令,它删除提交以及取消暂存文件,我们的更改存储在工作目录中。
  • git reset –hard HEAD~1 –此命令从您的工作目录中删除提交以及更改。此命令也可以称为破坏性命令,因为我们无法取回更改,因此在使用此命令时要小心。

上面我们刚刚讨论了 git reset 命令不能用于从远程存储库中删除提交,那么我们如何从远程存储库中删除不需要的提交我们这里使用的命令是 -

3.git还原

git revert 用于从远程存储库中删除提交。由于现在我们的更改在工作目录中,让我们将这些更改添加到暂存区域并提交它们。

现在让我们将更改推送到远程存储库。您可以在这里看到如何将您的更改从本地存储库推送到远程存储库。

现在我们要删除刚刚添加到远程存储库的提交。我们本可以使用 git reset 命令,但这只会从本地存储库而不是远程存储库中删除提交。如果我们这样做,那么我们会因为远程提交在本地不存在而发生冲突。所以,我们这里不使用 git reset 。我们可以在这里使用的最好的是 git revert。

现在让我们首先了解 git revert 做了什么, git revert 删除了我们已经完成的提交,但又添加了一个提交,告诉我们恢复已经完成。让我们看看这个例子——

我们可以看到正在添加新的提交。但是,由于此提交在本地存储库中,因此我们需要执行git push以便我们的远程存储库也注意到更改已完成。

正如我们所看到的,我们在远程存储库中有一个新的提交,我们在第二次提交中添加的Hello World正在从本地和远程存储库中删除。让我们总结一下我们在上面看到的要点——

差异表

git checkout

git reset

git revert

Discards the changes in the working repository.Unstages a file and bring our changes back to the working directory.Removes the commits from the remote repository.
Used in the local repository.Used in local repository.Used in the remote repository.
Does not make any changes to the commit history.Alters the existing commit history,Adds a new commit to the existing commit history.
Moves HEAD pointer to a specific commit.Discards the uncommitted changes.Rollbacks the changes which we have committed.
Can be used to manipulate commits or files.Can be used to manipulate commits or files.Does not manipulate your commits or files.