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

Ankit Raj Goyal 2023年1月30日
  1. 使用 git reset 命令撤消推送的提交
  2. 使用 git revert 命令撤消推送的提交
  3. 使用 git checkout 命令撤消推送的提交
使用 reset 和 restore 撤消 Git 中的推送提交

我们展示了三种方法来撤消从 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 Undo