使远程分支5提交回来

时间:2019-04-09 13:46:57

标签: git github

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

3 个答案:

答案 0 :(得分:3)

鉴于您的分支是公共和共享的,您可能应该进行硬重置以实际删除前两个提交。而是使用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 :(得分:1)

如果您执行普通的git push操作,它可能会告诉您落后并且需要同步,但是如果您执行git push --force操作,它将更新远程分支到上一次提交。

答案 2 :(得分:1)

我不建议重设。

最安全的方法是还原,例如:

git revert enter-your-commit-id-here

然后安全地推到遥控器上。