使远程分支5提交回来

问题描述 投票:2回答:3

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

git github
3个回答
3
投票

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

1
投票

如果你做一个普​​通的git push它可能会告诉你你落后并且你需要同步,但是如果你做了git push --force它将更新远程分支到之前的提交。


1
投票

我不建议重置。

最安全的方法是进行恢复,如下所示:

git revert enter-your-commit-id-here

然后安全地推到遥控器。

© www.soinside.com 2019 - 2024. All rights reserved.