关于github:如何用git覆盖新的提交?

how to overwrite commit with new one on git?

本问题已经有最佳答案,请猛点这里访问。

所以我正在和一个小组合作一个敏感的项目,我们所有的消息来源都在Github上。我最近推动了一项承诺,后来意识到我的推动中有很多错误。从那以后,我已经修复了本地副本上的所有错误,并将再次推动。但是,我是否有任何方法可以推送和覆盖我最后的提交?我的原因是,我不希望其他人查看我的初始提交和它所做的更改…

基本上我想用我的新承诺覆盖旧的承诺。因此,没有关于旧提交的信息留给其他组成员查看。

任何帮助都将不胜感激!谢谢您。

注意:刚才注意到这个问题被标记为一个副本。为了澄清,我的问题是重写一个已经被推送的提交。我的问题不是更改不正确的提交消息。


通常,一旦Github(或公共回购)上出现问题,就无法确保没有其他人拥有糟糕的承诺。

但是,如果您只是想要更清晰的代码历史记录,那么按照您的要求进行操作的方法要求您同时在本地和远程项目上覆盖历史记录。

如果您还没有用您的更改创建新的提交,那么您想要做的要么是执行git commit --amend来修改您的旧提交。

如果您已经创建了一个新的提交,那么您将希望使用git rebase -i在旧的提交之上挤压您的提交。

当您在本地进行了这个更改,并按照您希望的方式验证了您的提交之后,您将需要git push --force来覆盖GitHub远程上的历史记录。

这里有一个关于如何在Git中重新编写历史的教程,它解释了这个答案中列出的两种方法。


我不会建议您这样做,因为Git并不打算删除和/或编辑提交。您可以恢复以前的提交,然后再次提交"有效"代码。

或者你可以重新调整你的分支。或者看看这个答案。