如何临时切换到不同的提交

要暂时返回较旧的提交,我们可以通过提及提交哈希来使用 git checkout 命令:

git checkout <sha1-commit-hash>

上面的命令将分离你的 HEAD,也就是说,让你没有任何分支被检出。
要在从分支分离后进行提交,我们需要使用以下命令在该提交的基础上创建一个新分支:

git switch -c <new-branch-name>

我们可以运行以下命令,而不是使用上面的 2 个命令,在旧提交的基础上创建一个新分支:

git checkout -b <new-branch-name> <sha1-commit-hash>

如何删除未发布的提交

如果要删除仅存在于本地存储库中的最近提交,请运行以下命令:

git reset --hard <sha1-commit-hash>

上面的命令将删除所有最近的提交,直到你提到的哈希值。
提到的提交将是最近的提交

如果分支上有未提交的本地更改,此命令将删除所有更改。

如果我们想保留更改,请执行以下操作:

git stash
git reset --hard <sha1-commit-hash>
git stash pop

这会保存修改,然后在重置后重新应用该补丁。

如果我们修改了自重置提交以来发生更改的内容,则可能会出现合并冲突。
如果你搞砸了,你可以随时回去。
要了解如何做到这一点,请查看如何撤消 Git 重置。

git revert 命令

Git revert 属于“撤消”类别操作,但它不是经典的撤消命令。
git revert 命令用于撤消对存储库提交历史的更改。
git revert 命令允许我们选择单个提交,转换更改,最后生成一个全新的提交。
在本教程的范围内,我们将学习如何使用 Git 命令恢复到以前的状态。

通常,我们可以区分 git revert 的两个显着优势。
它们如下:

  • revert 命令可以有效地应用于特定的提交。
  • 它不会改变项目的历史。这意味着对于已经发送到共享存储库的提交来说,这是一个完全安全的操作。

git revert 和 git reset 命令

git revert 和 git reset 之间最显着的区别在于 git revert 命令针对特定的提交,而不是删除所有即将到来的提交。

相反,使用 git reset 命令将删除所有即将到来的提交。
假设我们要使用 git reset 命令撤消提交,我们需要删除目标提交之后的整个提交。
一般来说,git revert 是 git reset 的最安全的替代方案。
虽然这个过程看起来很复杂,但经过几次之后就变得很容易了。

如何将 Git 存储库恢复到以前的提交

在使用 Git 时,通常需要返回到较旧的提交之一以查看其状态或者删除其后的提交。

下面,我们将讨论上述场景。

如何撤消已发布的提交

在本节中,我们将演示两种撤消已发布提交的方法,具体取决于我们是否要保存历史记录。

删除已发布的提交

正如在上一节中演示的那样,可以使用 git reset --hard 命令删除本地提交。
之后,我们可以使用 --force 选项运行 git push 并从远程存储库中删除提交。

git push --force oroirn HEAD

--force 在本地分支的基础上覆盖远程分支。
它会破坏其他开发人员所做的所有推送更改。
它指的是我们在本地分支中没有的更改。

git push --force-with-lease oroirn HEAD

--force-with-lease 被认为是一个更安全的选项,它不会覆盖在远程分支上完成的工作,以防更多的提交添加到它上面(例如,由另一个开发人员)。
此外,它可以避免覆盖其他开发人员的。

还原已发布的提交

如果你已经发布了你的工作并且不想重置分支,你可以恢复提交。
使用 git revert 以免重写任何历史记录:

git revert <sha1-commit-hash>

如果不想为revert添加单独的commit,revert后可以在交互模式下运行git rebase,将最新的commit和revert的commit合并起来。
要了解如何做到这一点,请查看如何将多个 Git 提交合并为一个。

git rebase -i HEAD~2
日期:2020-06-02 22:16:43 来源:oir作者:oir