Git 如何放弃已推送到远程的更改?

Git 如何放弃已推送到远程的更改?,git,version-control,Git,Version Control,我发现了几个类似的问题和答案,但这些问题和答案只涉及本地提交(答案有时说在共享更改后不要这样做) 我有以下资料: A-B-C-D-E (HEAD) ↑ master = origin/master 我想要的是: someBranch ↓ C-D-E (HEAD) / A-B-F ↑ master = origin/master 其中F可以是一个commit,表示主节点已在那里重置。基本上我想撤销C、D和E中的更改,但我

我发现了几个类似的问题和答案,但这些问题和答案只涉及本地提交(答案有时说在共享更改后不要这样做)

我有以下资料:

A-B-C-D-E (HEAD)
        ↑
      master = origin/master
我想要的是:

    someBranch
        ↓
    C-D-E (HEAD)
   /
A-B-F
    ↑
master = origin/master
其中F可以是一个commit,表示主节点已在那里重置。基本上我想撤销C、D和E中的更改,但我不在乎重置是否在存储库中可见

如果这不可能,我最接近的替代方案是什么


编辑:澄清一点:我不是唯一一个参与该项目的人。

您只需对所有这些提交执行
git revert
,然后向上游推进即可。它将恢复所有这些提交。

一个非常残酷的解决方案是

git branch someBranch
git reset --hard HEAD~3
git push --force

如果您知道自您推到之后没有其他人拉过分支,例如,如果您是该项目的唯一工作人员,则这可能是可以接受的。否则,您可能会遇到问题。

git revert是生成一个新的提交来还原更改海报上说他不在乎重置是否在历史记录中可见,所以我认为这也是一种有效的方法。请确保未将其设置为远程存储库:git config receive.denynonfastforts truel我的问题是我不是唯一一个。@devconsole需要在重置和推送之间进行提交才能生成F@subsub如果你不是唯一的一个,那么git revert可能是一个不错的选择。通过这种方式,您可以向其他开发人员传达您确实希望恢复这些“错误”提交的信息。其他开发人员不会遇到问题,但另一方面,回购协议将受到恢复提交和错误提交的污染。这是你必须做的交易。