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