在切换到本地分支并推送不完整之前意外地在主分支上提交 - 如何恢复和合并



所以我在这里有点白痴。我正在主分支上工作,做了一堆提交,意识到我在主分支上,签出到另一个分支,假设提交会被带过来,在分支中提交一次,然后推送。在检查 github 存储库时,我看到只推送了最后一个提交。

那么我该如何撤消此操作,将所有提交合并到本地分支,然后重新推送它呢?

我的提交历史记录:

commit 9dc4373ea546dd90e27d3c0a75b39c2656799638 (HEAD -> feature/implement-checkout, origin/feature/implement-checkout, master)
Implement checkout service
commit 0cf3ec312c94d0b6a9d94f37b439ff4bea70199f
Add seeds
commit b6bcabcf15eacad8c94e96e4e325f5b2695a8ade
Add bills and bill discounts
commit a7cf1c5261b1fbbd2cadc0bf8899ab5729ea5ed7
Add bill item model
commit 52a812a5f495f9950efee887bfe7678355c56f18
Create bill model
commit 7b17847d45c1d04ed86928599ed7e16770f19fcc
Add item model
commit 188e82a1b36fe8439457c3a8f85609fb4f2c9f40
Add Rspec
commit 9b4c9393d19339a5264ce1d51db935f73a9a84ea
Initialize app

在这里继续操作的安全方法是将单个提交还原到另一个分支,然后按照您想要的方式重建它。

# from other_branch
git revert HEAD
git cherry-pick master~6^..master
git cherry-pick HEAD~8

此时,您的other_branch应如下所示:

other_branch: ... A -- A_R -- M1 -- M2 -- M3 -- M4 -- M5 -- M6 -- M7 -- A'

这里A是你对此分支进行的初始单个提交,A_R是还原提交。 在这一点上,在我们从master中挑选M1之前,你的分支就好像你甚至从未做过那个提交一样。 接下来,我们挑选 7 个最近的提交,masterM1M7。 最后,我们在A'中重新应用您的单个提交。

现在,您可以定期将此分支推送到 GitHub:

git push origin other_branch

最后,为了清理,我们需要删除您对master所做的提交。 假设你还没有推master,我们可以简单地做一个硬重置:

# from master
git reset --hard HEAD~7

最新更新