完全撤消提交并推送到远程[重复]

Posted

技术标签:

【中文标题】完全撤消提交并推送到远程[重复]【英文标题】:Completely undo commit and push to remote [duplicate] 【发布时间】:2020-01-18 13:31:39 【问题描述】:

[编辑:这个问题的答案抛弃了历史,如果这不是你想要的,那么忽略这个问题]。

[编辑:CodeWizard 指出重复的答案不是重复的,因为这个问题清楚地表明我想丢弃历史。此外,该问题中没有一个答案几乎与该问题收到的答案一样好]

我刚刚提交并推送了一些完全错误的代码。

我想完全退出该提交并推送,因为它从未发生过。

我不希望代码留在提交历史记录中。

没有人做过任何其他的提交和推送。

这个问题是不同的,因为我要求人们不要发布替代方案,除非他们实现完全相同的目标(丢弃所有历史记录)。原因是:我试图用谷歌搜索这个问题,但我得到的问题与提供替代方案的答案杂乱无章,但不清楚这些替代方案是丢弃代码还是将代码保留在 git 提交历史记录中。

这个问题仅限于: 1) 仅丢弃最后一次提交/推送。 2)所有历史都是关于提交/推送从回购中消失的。

我将这些限制放在上面,以便我们得到最简单的答案。

我正在使用 git 命令行和乌龟 git 对抗 gitlab。

【问题讨论】:

【参考方案1】:

您承认改写历史的危险。 Soo... 这会将 master 移回一次提交。

git push -f origin master~:master 

其他方法是重置 HEAD

git checkout master
git reset --hard HEAD~
git push origin -f master

【讨论】:

分解命令会很有用,以便 OP 或其他人可以根据需要对其进行调整。 -f 使其成为强制推送,告诉远程仓库(在这种情况下为origin)无论如何都要接受你给它的东西。 origin 当然是您要推送到的遥控器的本地名称。还要解释一下master~:master——如果你从/向不同的分支推送,显然你会在那里放一些别的东西。

以上是关于完全撤消提交并推送到远程[重复]的主要内容,如果未能解决你的问题,请参考以下文章

git checkout 不会删除新添加的文件

从数组中获取对象并推送到新数组[重复]

如果我们提交已经存在于远程仓库中的东西会发生什么

Git 创建远程仓库并克隆到本地,创建本地仓库并推送到远程仓库

撤消 git reset --hard origin/master [重复]

从分支 B 合并时,在分支 A 上恢复的提交不存在