git - 删除 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.
如果你能让我知道我该如何解决它,我将不胜感激。多谢你们
解决方案
硬重置后工作流程中正确的下一步应该是强制将分支推送到 GitHub:
git push --force origin jsonadd
强制推送是必需的,因为您通过重置它重写了此分支的历史记录。如果没有强制推送,您在本地进行的任何后续提交都无法被 GitHub 应用,这将无法将提交与仍然存在于远程的原始历史记录相关联。
我提到了你应该采取的“正确”下一步,但是,大多数时候,重写已经发布的 Git 分支的历史是不可取的。这是不可取的,因为这样做会给共享分支的任何其他人带来问题。此类用户会遇到您现在面临的相同错误,这促使您在此处发布问题。一个更好的策略是恢复最近的两个提交:
git revert HEAD~2..
此选项将应用两个新的提交,这将在功能上撤消两个最近的提交正在执行的操作。如果您只想要一个合并提交,请使用:
git revert --no-commit HEAD~2..
请注意,git revert
对于您的分支可能被其他用户共享,该方法是安全的。如果他们取消您的还原工作,除了删除还原预期的某些功能之外,不会发生任何意外。
推荐阅读
- dictionary - 如何获取 TreeMap 中索引的键
- php - XML 编码错误
- html - 如何在不使用 Bootstrap 的情况下从两侧定位表格 3-cols
- java - 如何在java中的某个其他类上模拟从内部方法返回的对象
- azure-devops - 对组织内的项目进行分组
- c - C中的链表或“动态”数组
- visual-studio-2010 - 如何在 Visual Studio 2010 中获取 Microsoft Team 的帐户状态
- reactjs - 访问 jobId 停止下载 react-native-fs
- sed - 对 sed 必须转义的内容感到困惑
- r - 如何编写一个基于 R 中匹配列值拆分数据的 for 循环