将本地应用程序还原为旧提交,将其推送并在分支中进一步替换提交

时间:2014-03-21 23:34:11

标签: git github

所以我在一个有一堆提交的分支上。在某个时间点,我决定最近的提交是坏的,我想回到倒数第二次提交。我使用git reset --hard xxxxxxxxxx执行此操作,其中xxxxxxxxxx是提交代码的前十位数字。这似乎适用于将本地应用程序恢复到倒数第二次提交的条件。

但是,当我尝试addcommitpush更改时,我收到错误,我的本地分支的提示位于其远程对应的后面。怎么办?

2 个答案:

答案 0 :(得分:1)

通常,Git只允许您将 new 提交更改为远程存储库,即提交仅添加到遥控器已有的内容。这主要是为了确保使用存储库的每个人都保持一致状态,并且他们的存储库不会中断。

如果您故意想要从遥控器中删除提交,您可以使用git push --force 覆盖遥控器的内容并强制它接受您提供的任何内容。这是您要从远程实际删除提交的操作。再次注意,这实际上打破了其他所有参与者的本地存储库(就像重新定位一样),所以不要这样做,除非你是唯一一个使用它的人,或者你真的同意所有人。

撤消更改的更实用方法是执行 revert 。这是一个额外的提交,它撤消了以前完成的工作。因此,不是从历史记录中删除提交,而是添加另一个撤消提交的提交。您可以使用git revert commit-you-want-to-revert

执行此操作

答案 1 :(得分:0)

由于1或2个原因,您的本地分支机构支持其远程对应部门:

  1. 您的分支机构已共享,有人将您需要提取的其他更改推送到您必须同步的本地分支机构,然后git才能推送您的更改,或者

  2. 您将最近的提交推送到远程,因此git不会让您推送非快进更改,因为这会覆盖该提交。在这种情况下,覆盖提交可能就是你想要的,因为你把它扔掉了,所以你可以在这种情况下强行推送。