首页 > 解决方案 > 删除 git 中的最后一次提交后无法推送到 github

问题描述

我是 Git 新手,我已经删除了最后两个已通过此命令推送到 github 的提交:

$ git reset --hard HEAD~2

现在,当我想将新的提交推送到我自己的分支( jsonadd )到 github 时,我面临以下问题:

$git push -u origin jsonadd
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.

如果你能让我知道我该如何解决它,我将不胜感激。多谢你们

标签: gitgithub

解决方案


硬重置后工作流程中正确的下一步应该是强制将分支推送到 GitHub:

git push --force origin jsonadd

强制推送是必需的,因为您通过重置它重写了此分支的历史记录。如果没有强制推送,您在本地进行的任何后续提交都无法被 GitHub 应用,这将无法将提交与仍然存在于远程的原始历史记录相关联。

我提到了你应该采取的“正确”下一步,但是,大多数时候,重写已经发布的 Git 分支的历史是不可取的。这是不可取的,因为这样做会给共享分支的任何其他人带来问题。此类用户会遇到您现在面临的相同错误,这促使您在此处发布问题。一个更好的策略是恢复最近的两个提交:

git revert HEAD~2..

此选项将应用两个新的提交,这将在功能上撤消两个最近的提交正在执行的操作。如果您只想要一个合并提交,请使用:

git revert --no-commit HEAD~2..

请注意,git revert对于您的分支可能被其他用户共享,该方法是安全的。如果他们取消您的还原工作,除了删除还原预期的某些功能之外,不会发生任何意外。


推荐阅读