我已经承诺并推动了分支。现在,我决定还原最后两个提交,我知道我可以做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'”
答案 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
然后安全地推到遥控器上。