迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 > Git >

使用 reset 和 restore 撤消 Git 中的推送提交

作者:迹忆客 最近更新:2023/04/04 浏览次数:

我们展示了三种方法来撤消从 Git 中的远程仓库推送的提交。为此,我们使用 git resetrevertcheckout 命令。

当我们使用 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 命令撤消推送的提交

我们在这里将四个错误的提交推送到远程仓库。

4 次错误提交推送到远程

我们可以使用 revert 撤消单个错误提交或一系列错误提交。

revert 进行新的提交,以反转不需要的提交。原始提交和反向提交都保留在仓库历史记录中。

使用 revert 撤消单个推送的提交

git revert <SHA of the commit we want to revert>

逆转旧的错误提交的新提交

我们现在将此更改推送到远程仓库。请记住使用 -f 标志来确保不会出现冲突。

git push -f undo-remote

我们的远程仓库现在有一个新的提交,可以逆转错误的提交。

远程仓库中的新 Revert Commit

使用 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

在没有错误提交的情况下创建并推送一个新分支

远程仓库现在有一个新分支,没有任何错误提交。

远程仓库有一个没有错误提交的新分支

上一篇:删除 Git init

下一篇:在 Git 中撤销提交

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Windows 系统中卸载 git

发布时间:2023/04/09 浏览次数:223 分类:Git

在这篇简短的文章中,我们将学习如何卸载 Git,以及如何在从个人计算机的目录中卸载 Git 后删除这些文件。

如何检查 Git 的版本

发布时间:2023/04/09 浏览次数:160 分类: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 命令,但这很麻烦,尤其是当我们有大量不冲突的文件时。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便