持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天, 点击查看活动详情

如何使用 git reset 命令恢复到之前的提交

首先,我们先创建一个文件 tasks.txt .

1. code.
2. Practice.
3. Build. 

接下来,我们将初始化、添加和提交此文件:

git init
git add tasks.txt
git commit -m "first commit"

我们已经做出了第一次承诺。

我们将再重复上述两次,但在每次提交之前,我们会在文件中添加一行额外的文本。那就是:

1. code.
2. Practice.
3. Build. 
4. Research. 
git add tasks.txt
git commit -m "second commit"

最后,对于第三个提交:

1. code.
2. Practice.
3. Build. 
4. Research. 
5. Write.
git add tasks.txt
git commit -m "third commit"

现在我们有三个提交。要恢复到之前的提交,您必须首先获得提交ID。为此,请运行以下命令:

git log --oneline

在我的终端里,我有这个:

git日志--oneline

如上所述,此命令列出了您的所有提交及其ID。

要返回第二个提交,请运行git reset命令,后跟提交ID。那就是:

git reset 5914db0

如果您已经跟进到这一点,您不会注意到文件中的任何差异(您将看到如何撤销提交和稍后对文件所做的任何更改)。

文件看起来还是这样:

1. code.
2. Practice.
3. Build. 
4. Research. 
5. Write.

但是,当我们运行git log --oneline命令时,第三个提交不会出现在提交日志中:

git日志--oneline

我们已成功返回到之前的提交。

如果您想撤销提交以及提交后所做的所有更改,请将--hard标志附加到git reset命令中。

让我们通过恢复到第一个提交来测试这一点:

git reset 89f6c3d --hard

这就是文本文件现在的样子:

1. code.
2. Practice.
3. Build. 

在指定提交点,我们回到了文件的初始状态。提交后对文件所做的所有更改都被删除了。当我们检查提交日志时,我们只有第一个提交。

虽然这似乎很酷,但使用此命令时您应该小心。尤其是当你与团队合作时。

如果您撤销提交并删除其之后的每个文件更改,您可能会丢失您和其他队友对代码的重要更改。这还将更改项目的提交历史记录。

幸运的是,有办法恢复已删除的提交状态。你可以在这里了解更多信息。

如何使用git revert命令恢复到之前的提交

我已经初始化了该项目,并像上一节一样进行了三次提交。以下是提交日志的样子:

git日志--oneline

要恢复到上一个提交,请运行git revert命令以及当前提交的提交ID。

在我们的案例中,我们将使用第三个提交的ID:

git revert 882ad02

上面的命令将撤销当前提交,并将文件恢复到上一个提交状态。当您检查提交日志时,您将遇到这样的东西:

git日志--oneline

git reset命令不同,git revert命令为恢复的更改创建一个新的提交。我们从中恢复的提交不会被删除。

因此,正如您所看到的,git resetgit revert是不一样的。

git reset将撤销更改,直到指定提交ID的状态。例如,恢复到第二个提交ID将撤销更改,并将文件的状态保留为第二个提交状态。

git revert将撤销更改,直到指定提交ID之前的状态。例如,恢复到第二个提交ID将撤销更改,并将文件的状态保留为第二个提交之前的提交状态——第一个提交。

上面的解释似乎令人困惑。理解它的最好方法是自己尝试一下。

何时使用git resetgit revert

在处理尚未远程推送更改的本地存储库时,您应该使用git reset。这是因为从远程回购协议中提取更改后运行此命令将更改项目的提交历史记录,导致每个在项目上工作的每个人都出现合并冲突。

git reset当您意识到对特定本地分支所做的更改应该在其他地方时,这是一个不错的选择。您可以重置并移动到所需的分支,而不会丢失文件更改。

git revert是恢复推送到远程存储库的更改的好选择。由于此命令创建一个新的提交,您可以安全地消除错误,而无需为其他人重新排列提交历史记录。

在本文中,我们讨论了在Git中恢复到以前的提交。

我们讨论了两个主要命令,展示了如何撤销Git更改——git resetgit revert命令。

我们还通过实际示例看到了这两个命令是如何工作的。 希望可以帮助到你。

  •