首页 > 解决方案 > 使远程分支 5 次提交

问题描述

我已经提交并推动了分支。现在我决定恢复最后两次提交,我知道我可以做到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' of ...”

标签: gitgithub

解决方案


鉴于您的分支是公共和共享的,您可能不应该进行硬重置来实际删除前 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

推荐阅读