git reset soft 何时使用 Git Reset、Git Revert 和 Git Checkout

2025-05-25

git reset soft何时使用 Git Reset、Git Revert 和 Git Checkout

Git 工具箱提供了多种独特的工具,用于修复开发过程中的错误。诸如git resetgit checkout和 等命令git revert可用于撤消存储库中的错误更改。

由于它们执行的操作类似,因此容易混淆。关于每个命令的适用情况,有一些指导原则和规则。让我们来看看!

小心!撤销后不一定能重做。这是 Git 中少数几个如果操作错误可能会丢失部分工作的地方之一。

使用 Git 命令撤消

我将首先阐明这三个命令之间的主要区别。

查看:

  • 使用它将HEAD 指针移动到特定的提交或在分支之间切换。
  • 它将任何内容更改回滚到特定提交的更改。
  • 这不会改变提交历史。
  • 有可能覆盖工作目录中的文件。

恢复:

  • 回滚您已提交的更改
  • 通过反转指定的提交来创建新的提交。这样,会向项目添加新的提交历史记录,但不会修改现有的提交历史记录。
  • 有可能覆盖工作目录中的文件。

重置:

  • 使用此选项可将整个工作树恢复到上次提交的状态。这将丢弃私有分支中提交或丢弃未提交的更改!
  • 提交 HEAD 当前指向的分支的更改。它会修改现有的提交历史记录。
  • 可用于取消暂存文件。

每个命令都允许您撤消存储库中的某种更改,只有 checkout 和 reset 可用于操作提交或单个文件。

使用命令

撤消更改的方法有很多种,具体取决于当前情况。选择合适的方法取决于您是否错误地提交了更改;如果提交了更改,则取决于您是否已共享更改。

撤消公共更改

场景:git push您在 hotfix 分支中对尚未做出的提交进行的图像处理。

解决方案:解决此问题最安全的方法是撤消更改,因为它不会重写提交历史记录。

git checkout hotfix
git revert HEAD~1
Enter fullscreen mode Exit fullscreen mode

结果:您已成功撤消已提交的更改!旧提交中的所有内容都将通过此新提交恢复。Git会强制您提交或存储工作目录中所有在检出期间会丢失的更改。

git-revert

您可以将 视为用于撤消已提交git revert更改的工具,而 则用于撤消未提交更改。git reset HEAD

撤消本地更改

场景:你开始开发某个功能,但对最终结果并不满意。这些更改尚未与任何人**共享*。

解决方案:您想将该文件中的所有内容撤消到之前的状态,就像上次提交时的样子

git checkout file_name.rb
Enter fullscreen mode Exit fullscreen mode

结果:文件file_name.rb恢复到 Git 先前已知的状态。请注意,这将删除该文件的所有后续更改!

您可以使用git checkout branch_name在分支之间切换。Git 会强制您提交或存储工作目录中在检出操作期间将丢失的任何更改。

撤消私人更改

场景:你在hotfix 分支上做了一些本地提交,但一切都很糟糕!你想从当前分支中删除最后两个提交。

解决方案: 修补程序分支向后重置两次提交,就好像这些提交从未发生过一样。

git checkout hotfix
git reset HEAD~2
Enter fullscreen mode Exit fullscreen mode

结果:你的 git 仓库已完全回退到指定的提交。那些遗漏的提交现在处于孤立状态,将在下次 Git 执行垃圾回收时被移除。目前,它们的内容仍在磁盘上。

git 重置

您可以使用以下参数之一告诉 Git在执行时如何处理索引(将成为下一次提交的文件集)和工作目录:git reset

  • --soft:告诉 Git 将 HEAD 重置为另一个提交,这样索引和工作目录将不会受到任何更改。所有在原始 HEAD 和提交之间更改的文件都将被暂存。
  • --mixed:与 soft 类似,这会将 HEAD 重置为另一个提交。它还会重置索引匹配该提交,但工作目录不会受到影响。所有更改--mixed仍将保留在工作目录中,并显示为已修改,但未暂存。>和之间的主要区别--soft在于索引是否也进行了修改。更多信息请参阅git-reset-guide
  • --hard:这将重置所有内容 - 它将 HEAD 重置回另一个提交,重置索引以匹配它,并重置工作目录以匹配它。

技巧和窍门

在您的 Git 冒险过程中,还有两件额外的东西可能会派上用场。

修复先前的提交消息

场景:每个人在提交时都会犯拼写错误,这完全没问题!在执行git push.

解决方案:只需运行git commit --amendgit commit --amend -m 'The new message'。这将更新并用新的提交替换最近的提交。

撤消后重做

场景:您做了git reset --hard一些不必要的更改,但后来您意识到您确实需要它们。

解决方案: git reflog来拯救你了!这是一个恢复项目历史记录的神奇命令,几乎可以恢复任何东西。


希望这三个工具能够在您需要撤消最近的更改时为您提供帮助。

本文最初发表于Kolosek Blog

文章来源:https://dev.to/neshaz/when-to-use-git-reset-git-revert--git-checkout-18je
PREV
JavaScript 中的基本函数式编程模式
NEXT
Git Merge 如何使用 Git Merge [正确方法]