git reset soft何时使用 Git Reset、Git Revert 和 Git Checkout
Git 工具箱提供了多种独特的工具,用于修复开发过程中的错误。诸如git reset
、git checkout
和 等命令git revert
可用于撤消存储库中的错误更改。
由于它们执行的操作类似,因此很容易混淆。关于每个命令的适用情况,有一些指导原则和规则。让我们来看看!
小心!撤销后不一定能重做。这是 Git 中少数几个如果操作错误可能会丢失部分工作的地方之一。
使用 Git 命令撤消
我将首先阐明这三个命令之间的主要区别。
查看:
- 使用它将HEAD 指针移动到特定的提交或在分支之间切换。
- 它将任何内容更改回滚到特定提交的更改。
- 这不会改变提交历史。
- 有可能覆盖工作目录中的文件。
恢复:
- 回滚您已提交的更改。
- 通过反转指定的提交来创建新的提交。这样,会向项目添加新的提交历史记录,但不会修改现有的提交历史记录。
- 有可能覆盖工作目录中的文件。
重置:
- 使用此选项可将整个工作树恢复到上次提交的状态。这将丢弃私有分支中的提交或丢弃未提交的更改!
- 提交 HEAD 当前指向的分支的更改。它会修改现有的提交历史记录。
- 可用于取消暂存文件。
每个命令都允许您撤消存储库中的某种更改,只有 checkout 和 reset 可用于操作提交或单个文件。
使用命令
撤消更改的方法有很多种,具体取决于当前情况。选择合适的方法取决于您是否错误地提交了更改;如果提交了更改,则取决于您是否已共享更改。
撤消公共更改
场景:git push
您在 hotfix 分支中对尚未做出的提交进行的图像处理。
解决方案:解决此问题最安全的方法是撤消更改,因为它不会重写提交历史记录。
git checkout hotfix
git revert HEAD~1
结果:您已成功撤消已提交的更改!旧提交中的所有内容都将通过此新提交恢复。Git会强制您提交或存储工作目录中所有在检出期间会丢失的更改。
您可以将 视为用于撤消已提交
git revert
更改的工具,而 则用于撤消未提交更改。git reset HEAD
撤消本地更改
场景:你开始开发某个功能,但对最终结果并不满意。这些更改尚未与任何人**共享*。
解决方案:您想将该文件中的所有内容撤消到之前的状态,就像上次提交时的样子。
git checkout file_name.rb
结果:文件file_name.rb
已恢复到 Git 先前已知的状态。请注意,这将删除该文件的所有后续更改!
您可以使用
git checkout branch_name
在分支之间切换。Git 会强制您提交或存储工作目录中在检出操作期间将丢失的任何更改。
撤消私人更改
场景:你在hotfix 分支上做了一些本地提交,但一切都很糟糕!你想从当前分支中删除最后两个提交。
解决方案: 将修补程序分支向后重置两次提交,就好像这些提交从未发生过一样。
git checkout hotfix
git reset HEAD~2
结果:你的 git 仓库已完全回退到指定的提交。那些遗漏的提交现在处于孤立状态,将在下次 Git 执行垃圾回收时被移除。目前,它们的内容仍在磁盘上。
您可以使用以下参数之一告诉 Git在执行时如何处理索引(将成为下一次提交的文件集)和工作目录:git reset
--soft
:告诉 Git 将 HEAD 重置为另一个提交,这样索引和工作目录将不会受到任何更改。所有在原始 HEAD 和提交之间更改的文件都将被暂存。--mixed
:与 soft 类似,这会将 HEAD 重置为另一个提交。它还会重置索引以匹配该提交,但工作目录不会受到影响。所有更改--mixed
仍将保留在工作目录中,并显示为已修改,但未暂存。>和之间的主要区别--soft
在于索引是否也进行了修改。更多信息请参阅git-reset-guide。--hard
:这将重置所有内容 - 它将 HEAD 重置回另一个提交,重置索引以匹配它,并重置工作目录以匹配它。
技巧和窍门
在您的 Git 冒险过程中,还有两件额外的东西可能会派上用场。
修复先前的提交消息
场景:每个人在提交时都会犯拼写错误,这完全没问题!在执行git push
.
解决方案:只需运行git commit --amend
或git 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