如何使用 git 撤消已推送的提交?
如何使用 git 撤消已推送的提交?
我有一个项目在一个远程仓库中,它与本地仓库(开发)和服务器仓库(生产)同步。我已经做了一些提交的更改,已经推送到远程和从服务器上拉取了。现在,我想撤销这些更改。所以我可以用git checkout
到这些更改之前的提交中,并提交新的更改,但我猜这样重新推送它们到远程会有问题。有任何建议应该怎么做吗?
admin 更改状态以发布 2023年5月24日
一种不留下 "撤销" 痕迹的解决方案。
注意:如果有人已经拉取了你的更改,请勿执行此操作(我个人只在个人仓库上使用此操作)。
运行:
git reset
这将重新检出所有更新,使得 Git 状态将列出所有已更新的文件。
然后 "进行你的工作" 并重新提交更改(注意:这一步是可选的)。
git commit -am "blabla"
此时,本地树与远程树存在差异。
git push -f
将强制让远程分支接受此推送并删除之前的推送(不强制指定远程名称和分支名称不是必需的,但建议这样做以避免更新所有具有更新标记的分支)。
!!注意:某些标签可能仍然指向已删除的提交!!如何删除远程标签
你可以使用以下方法撤销单个提交:
git revert
这将创建一个新的提交,撤销您指定的提交所做的更改。请注意,它只会撤销特定的提交,而不是其后的提交。如果您想撤销一系列提交,可以像这样操作:
git revert..
它将撤销
以及包括
在内的所有提交。在一些git版本上,它还会撤销
,因此请仔细确认是否已经撤销了该提交。您可以使用g reset --hard HEAD~
放弃最近的撤销提交(它撤销了最老的提交)。
要找到提交的哈希值,您可以使用git log
命令。
查看git-revert手册页获取有关git revert
命令的更多信息。此外,查看此答案获取有关撤销提交的更多信息。