使用 reset 和 restore 撤消 Git 中的推送提交
我们展示了三种方法来撤消从 Git 中的远程仓库推送的提交。为此,我们使用 git reset
、revert
和 checkout
命令。
当我们使用 git reset
时,我们还会从仓库历史记录中删除任何不需要的提交的痕迹。但是使用 git revert
,原始提交和撤消提交都保留在历史记录中。
如果我们使用 git checkout
,我们会撤消新分支中的更改。
使用 git reset
命令撤消推送的提交
我们创建了一个 undo_pushed_commits_local
仓库,并用一些健康(良好)的提交填充它。
mkdir undo_pushed_commits_local
git init
然后添加/修改文件。
git add --all
git commit -m "Make healthy commit"
添加/修改更多文件。
git add -all
git commit -m "Make another healthy commit"
我们现在将这些提交推送到 GitHub 上的 undo-pushed-commits-remote
仓库。
git remote add undo-remote git@github.com:danielturidandy/undo-pushed-commits-remote.git
git push undo-remote master
我们的远程仓库现在有两个提交。
现在,让我们做出错误的提交。
echo "This is a bad addition" >> file1.txt
echo "This is a bad addition" >> file2.txt
git add -all
git commit -m "Make a bad commit"
我们将此提交推送到远程仓库。
git push undo-remote
我们的远程有错误的提交:
我们现在重置
到本地仓库中的最后一个良好提交。我们使用 --hard
选项从提交历史中删除任何错误提交的痕迹。
git log
git reset --hard <SHA of the last good commit>
我们使用 -f 选项将本地推送
到远程仓库以强制推送。
git push -f undo-remote
此方法最适用于私有仓库或小型团队的仓库。
如果一些开发人员在我们重置为良好状态之前推送错误提交后将远程拉到本地环境,大型团队可能会遇到问题。他们没有提交历史记录,其中包含纠正
其仓库的错误提交信息。
使用 git revert
命令撤消推送的提交
我们在这里将四个错误的提交推送到远程仓库。
我们可以使用 revert
撤消单个错误提交或一系列错误提交。
revert
进行新的提交,以反转不需要的提交。原始提交和反向提交都保留在仓库历史记录中。
使用 revert
撤消单个推送的提交
git revert <SHA of the commit we want to revert>
我们现在将此更改推送到远程仓库。请记住使用 -f 标志来确保不会出现冲突。
git push -f undo-remote
我们的远程仓库现在有一个新的提交,可以逆转错误的提交。
使用 revert
撤消一系列推送的提交
git revert <SHA of the oldest commit to revert>..<SHA of the newest commit to revert>
这将恢复所提供范围内的所有提交(不包括最旧的提交,但这也可能取决于你使用的版本/平台。)
我们现在使用 -f 标志将更改推送到远程。
git push -f undo-remote
这种方法非常适合拥有大型团队的公共仓库。由于错误提交和撤消提交都保留在历史记录中,因此开发人员可以使用所有错误推送/恢复来更新他们的本地仓库。
使用 git checkout
命令撤消推送的提交
这种技术是一种快速的 hack,它可以在没有错误提交的情况下创建一个新分支。它非常适合小型代码库并且如果你时间紧迫。
我们首先 checkout
到最后一个好的提交。
git checkout <SHA of last known good commit>
然后,我们在仓库历史记录中最后一次已知的良好提交时达到分离的 HEAD 状态。
我们现在从这个状态分叉一个新的分支。
git checkout -b branch_without_badcommits
然后我们将它推入远程进入一个新的分支。
git push -f undo-remote branch_without_badcommits
远程仓库现在有一个新分支,没有任何错误提交。
相关文章
如何在 Windows 系统中卸载 git
发布时间:2023/04/09 浏览次数:223 分类:Git
-
在这篇简短的文章中,我们将学习如何卸载 Git,以及如何在从个人计算机的目录中卸载 Git 后删除这些文件。
Git 如何重命名本地分支
发布时间:2023/04/09 浏览次数:64 分类:Git
-
大多数情况下,重命名分支机构是由于上述情况。 因此,在本教程中,我们将学习使用下面提到的技术更改本地 Git 分支的名称。
重命名 Git 存储库中的文件和目录
发布时间:2023/04/09 浏览次数:102 分类:Git
-
在本文中,我们将讨论 git 中的重命名过程。 我们使用 Git Rename 来更改工作目录中文件和文件夹的名称。
在 Git 中取消初始化存储库
发布时间:2023/04/09 浏览次数:187 分类:Git
-
本本文介绍如何通过 Git 命令行取消初始化 Git 存储库。git init 命令开发一个新的空置 Git 存储库。 它还用于重新初始化已经存在的 Git 存储库。
Git 仓库名称该如何命名
发布时间:2023/04/09 浏览次数:208 分类:Git
-
使用 Git 时,选择一个简洁且最新的存储库名称是一项艰巨的任务。本教程介绍了如何以独特的方式命名 Git 存储库。
配置 Git 以忽略文件模式更改
发布时间:2023/04/09 浏览次数:67 分类:Git
-
本文讨论配置 Git 以忽略文件更改 chmod 所需的步骤。 如果您更改 Git 正在跟踪的文件的权限,系统将在该文件中注册更改。
在 Git 中暂存已删除的文件
发布时间:2023/04/09 浏览次数:93 分类:Git
-
本文讨论了在 Git 中暂存已删除文件的必要步骤。我们知道 rm 命令可以删除一个文件,而无需将其从工作目录中移除。 那么,我们如何暂存已删除的文件以进行提交呢?
在 Git 中显示冲突文件
发布时间:2023/04/09 浏览次数:139 分类:Git
-
本文讨论在 Git 中列出冲突文件的最简单和最干净的方法。 我们可以使用 git status 命令,但这很麻烦,尤其是当我们有大量不冲突的文件时。