Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 在切换到本地分支并推送未完成之前意外提交到主分支-如何还原和合并_Git_Github - Fatal编程技术网

Git 在切换到本地分支并推送未完成之前意外提交到主分支-如何还原和合并

Git 在切换到本地分支并推送未完成之前意外提交到主分支-如何还原和合并,git,github,Git,Github,所以我在这里有点傻。我在主分支上工作,做了一系列提交,意识到我在主分支上,签出到另一个分支,假设提交会被带过来,在分支中提交一次,然后推送。在检查github repo时,我看到只有最后一次提交被推送 所以,我如何撤销它,将所有提交合并到本地分支,然后重新推送它 我的提交历史记录: commit 9dc4373ea546dd90e27d3c0a75b39c2656799638 (HEAD -> feature/implement-checkout, origin/feature/imple

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

所以,我如何撤销它,将所有提交合并到本地分支,然后重新推送它

我的提交历史记录:

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: ... A -- A_R -- M1 -- M2 -- M3 -- M4 -- M5 -- M6 -- M7 -- A'
这里,
A
是您对此分支所做的初始单次提交,
A\u R
是恢复提交。在这一点上,在我们从
master
中选择
M1
之前,您的分支就好像您从未进行过该提交。接下来,我们通过
M7
选择最近提交给
master
的7个提交作为
M1
。最后,我们在
A'
中重新应用您的单个提交

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

git push origin other_branch
最后,为了进行清理,我们需要删除您对
master
所做的提交。假设您尚未按下主控键,我们只需进行硬复位:

# from master
git reset --hard HEAD~7

承诺的顺序对你真的重要吗?最好是。我已经把它设置好了,这样它的订购方式就让森塞塔克斯非常渴望得到回复。我已经在上面添加了我的提交历史记录。因此,为了确保我是否应该运行
git revert HEAD
,然后运行
git cherry pick master~6
,最后运行
git cherry pick HEAD~8
?只是对号码有点不确定我的答案不是这么说的。您是否向
master
提交了6次?没有提交7次。您在回答中提到,
git cherry pick master~2^..master
将获得最近的3次提交,因此我假设
git cherry pick master~6^..master
将获得7次提交?这是一个全新的应用程序,如果它有帮助的话-如果更容易的话,可以抓取所有的提交吗?