更改已推送的git提交

更改已推送的git提交,git,Git,在git中进行合并时,我意外地重写了另一个开发人员的更改。我知道如何,就是我的合并 我的问题是,我已经将这些提交推送到了我们的在线存储库中。所以如果我回滚,再次进行合并(这次有他的修改)并尝试再次推送,就会发生冲突(对吗?)。什么是正确的处理方法 编辑 为了澄清这一点,以下是情况: commit A --- commit B --- merge 但是在合并过程中,我意外地放弃了在提交A中所做的修改。这不是一个真正的问题。我知道如何在本地进行更改(撤消合并)但是我的问题是整个过程都被推送到了我们

在git中进行合并时,我意外地重写了另一个开发人员的更改。我知道如何,就是我的合并

我的问题是,我已经将这些提交推送到了我们的在线存储库中。所以如果我回滚,再次进行合并(这次有他的修改)并尝试再次推送,就会发生冲突(对吗?)。什么是正确的处理方法

编辑 为了澄清这一点,以下是情况:

commit A --- commit B --- merge

但是在合并过程中,我意外地放弃了在提交A中所做的修改。这不是一个真正的问题。我知道如何在本地进行更改(撤消合并)但是我的问题是整个过程都被推送到了我们的共享存储库中(想想github或bitbucket)。

默认情况下,远程服务器将不允许覆盖已经推送的提交。这是因为这些新提交是不同的对象,与以前发布的对象不兼容。这意味着,一旦您覆盖提交,任何已经从远程获取的人都将在修复它时遇到重大问题。因此,您应该重新考虑使用其他内容覆盖提交。请注意,<>代码> Git Reuts
尽管如此,您仍然可以推送重写的提交,即使它与服务器上的内容冲突。您可以使用
git push--force
git push-f
强制推送来实现这一点。

注意“更改修订”实际上是“删除修订并添加新的、不同的修订”。这看起来不像是建议问题的重复。建议包括回滚本地更改,但这里的OP询问的是将远程存储库回滚到以前的状态。我认为最干净的解决方案是使用git cherry pick重新应用提交补丁。通过这种方式,您可以添加历史记录,而不是更改历史记录,如果历史记录被发布,这总是一个坏主意@nha是的,所有权将被保留。正如@poke在他的回答中提到的,你也可以
git revert
merges。所以这也许是另一种选择!我不确定我是否理解git revert。我是否能够推送到存储库,但什么都没有发生?或者它是否添加了一个与上一个完全相反的提交?您是否对
git revert
vs
git cherry pick
有意见?是的,
git revert
将添加一个新的提交,以撤消所选的提交。因此,推送它将起作用,因为它不会删除任何已发布的提交。谢谢!我会接受你的答案,但我也投票给了你@musicmatze。(我很高兴听到关于两种选择各自优点的意见)