持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
如何在 Git 中保存未提交的更改
之前,我谈到了 Git 的 3 种状态,即修改、暂存和提交。
有时我们想要快速切换分支而不保存我们对当前分支所做的更改。这可能是为了快速修复或只是检查一些东西,而我们还没有完成当前分支的工作。我们可以通过stash 来做到这一点。
存储在 Git 中的工作原理
Stashing 让你可以保存所有未提交的工作并将它们保存为未完成的更改,即使你在单独的分支上也可以稍后重新应用。
要存储文件,你可以使用命令git stash. 这会将所有未提交的更改保存在堆栈中,并为你留下一个干净的分支。要查看你的存储,你可以使用命令git stash list。但是,它不会保存未跟踪的文件。
存储清单
当你准备好应用隐藏的更改时,只需运行命令git stash apply,它就会应用这些更改。
如果你有多个存储,则可以通过指定要应用的存储来指定要应用的存储(例如stash@{0})。如果你没有指定要应用的存储,Git 会自动应用最近的存储更改。
存储应用
如何撤消 Git 中的更改
在从事任何类型的项目时,无论我们多么小心或我们的系统多么高效,有时我们都会不可避免地搞砸。这可能是人为或计算机错误。
通常在使用传统的应用程序和文字处理器时,我们只需点击一个撤消按钮或快捷键 cntrl/cmd + z,我们就会回到原来的位置。但是当使用 Git 时,我们没有那么奢侈,所以我们必须通过更多的步骤来修复/撤消这些错误。
我们可以使用几种方法来修复/撤消这些错误,让我们一一来看看它们。
查看
Checkout 主要用于切换分支,但也可以用于将你的 HEAD 指向特定的提交。你可以通过在 checkout 命令后指定你的提交 SHA 编号来执行此操作。
git checkout [commit SHA]
这使你处于分离的 HEAD 状态,你可以对其进行临时或实验性更改,而不会影响你的任何分支。
成功签出你的提交后,你可以将其转换为单独的分支。
git checkout -b [name of your new branch]
or
git switch -c [name of your new branch]
使用“结帐”撤消更改
但是请记住,使用 checkout 可能会导致你之前的分支丢失,因为它处于分离的 HEAD 状态。
恢复
这是在你的存储库中修复错误的最直接的方法。顾名思义,Revert 通过在有错误但没有错误的提交之前添加一个提交来逆转错误。把它想象成同时在时间上来回走动。
这是一个示例:你有 2 个提交,名为“初始提交”和“设置开发环境”。在工作时,你注意到你在第二次提交中犯了一个错误,并希望返回“初始提交”。
当你调用该git revert关键字时,它会创建第三次提交,这与将你的存储库返回到第二次提交发生之前完全相同。使用 Git revert,你需要传递一个提交 ref,并且类似于 3 路合并,你需要为正在创建的新提交传递一个提交消息。
重置
这是在 Git 中撤消更改的最复杂、最通用和最危险的方法。通常建议不要在共享存储库中使用重置,因为它可能导致项目的巨大损失。好的,让我们看看 reset 的作用以及它与其他方法有何不同。
Git reset 有三个选项。根据你使用的内容,它可能会更改提交历史记录、提交历史记录和暂存索引,或者提交历史记录、暂存索引和工作目录。
第一个仅git reset --soft更改提交历史记录。有了这个,你需要指定你想使用它的 ID 返回哪个提交。
git reset --soft [commit ID]
这将删除你要返回的提交之后的所有提交。
第二个git reset --mixed是git reset调用的默认行为。它改变了提交历史和暂存索引。因此,如果你在暂存区域中有任何文件,它会取消暂存这些文件,如果指定了提交 ID,它会返回到该提交,删除其后的所有提交。
//Both do the same thing
git reset [commit ID]
git reset --mixed [commit ID]
最后一个是最危险的,只能作为最后的手段使用git reset --hard。这会改变提交历史、暂存索引和工作目录。
所以它首先返回到由提交 ID 指定的提交,取消暂存所有暂存文件,并删除在工作目录中完成的所有更改。这意味着如果你修改了任何文件或添加了更多文件,它会从工作目录中删除所有这些修改和添加。
你可以看到为什么不建议使用此命令,除非你别无选择。
修复或撤消错误的最安全方法是使用git revert命令。这是因为它不会更改你的提交历史记录,而是在出现错误的提交之前创建一个新提交。这样,如果需要,你仍然可以返回带有错误的提交。
包起来
我希望这篇文章能让你清楚地了解使用 Git的工作原理。感谢你的阅读!