我已经承诺并推动了分支机构。现在我决定恢复最后两次提交,我知道我可以做git reset --hard HEAD~2
,我就做了。现在在我的本地分支中,提交是两步。但是我怎么能把它推到远程分支?我的意思是我怎样才能使远程分支也被提交2次?
我问的原因是,在我上面本地恢复之后,我改变了代码并提交了。当我推送到远程仓库时,我得到了拒绝错误:
Updates were rejected because the tip of your current branch is behind
====更新====
我尝试了@Tim Biegeleisen的回答,git revert --no-commit HEAD~5..
但得到错误:
error: commit d7f37d67f8dbdaecc534c06316b7417657e527 is a merge but no -m option was given. fatal: revert failed
并且远程分支显示最新的提交是“合并分支'foo'...”
鉴于您的分支是公共的和共享的,您可能不应该进行硬重置以实际删除前2个提交。相反,使用git revert
:
git revert master~2..master
或者可能
git revert --no-commit HEAD~2..
这将在你的HEAD
分支的master
之上添加一个新的提交,它将在功能上撤消当前的前2个提交。请注意,那些提交仍将存在,这意味着任何人都会获得新的提交。
编辑:
根据您的注释和错误消息,两个提交之一似乎是合并提交。这意味着你需要告诉Git在进行还原时要遵循哪两个父母。我不知道在具有一系列提交的单个命令中执行此操作的方法,但我们可以尝试执行两个单独的恢复。假设HEAD指向合并提交:
git revert -m 1 abc123 # or use -m 2 to follow the other parent
这里abc123
是HEAD提交的SHA-1哈希,你可以通过使用git log
找到它。然后,为第二次提交做第二次恢复:
git revert xyz345
如果你做一个普通的git push
它可能会告诉你你落后并且你需要同步,但是如果你做了git push --force
它将更新远程分支到之前的提交。
我不建议重置。
最安全的方法是进行恢复,如下所示:
git revert enter-your-commit-id-here
然后安全地推到遥控器。