在git中进行合并时,我意外地覆盖了另一个开发者的更改。我知道如何undo the last commit,也就是我的合并。
我的问题是我已经将这些提交推送到我们的在线存储库中。因此,如果我回滚,再次进行合并合并(这次是他的修改)并尝试再次推送它,会发生冲突(对吗?)。处理这个问题的方法是什么?
修改 澄清一下,情况如下:
commit A --- commit B --- merge
但是在合并中我不小心丢弃了在提交A中进行的修改。这不是一个真正的问题。我知道如何在本地进行更改(撤消合并)。 但是我的问题是整个事情已被推入我们的共享存储库(想想github或bitbucket)。
答案 0 :(得分:5)
默认情况下,远程服务器将禁止覆盖已推送的提交。这是因为那些新提交是不同的对象,与之前发布的对象不兼容。这意味着任何已经从远程获取的人都会在覆盖提交后修复它时遇到重大问题。所以你应该重新考虑用其他东西覆盖提交。请注意,git revert
也适用于合并提交,因此您可能需要考虑这一点。
话虽这么说,即使它与服务器上的内容冲突,你仍然可以推送重写的提交。您可以通过强制推送使用git push --force
或git push -f
来完成此操作。