假设我在我的本地A
上有一个分支,这也存在于远程origin/A
中。我的本地和远程分支都是同步的。例如,在本地我提交了类似 - C1
,C2
,C3
和C4
的内容,并且在我的遥控器中也是如此。
现在我想恢复我为C4
提交的更改。我已经把它推到了遥控器上,所以我也希望在遥控器上做到这一点。
注意:我在stackoverflow中发现了很多问题。这是 one。但它不适合我!
据此,我试过:
git reset --hard HEAD~1
git push -f origin A
第一个命令工作正常,我的本地版本现在没有C4
提交。
第二个命令出现问题。它显示remote: error: denying non-fast-forward refs/heads/A (you should pull first)
。
如何解决这个问题?
答案 0 :(得分:2)
您当前删除最新提交的方法完全正确:
git reset --hard HEAD~1
git push -f origin A
不幸的是,GitHub似乎不允许你进行强制推送。但是,还有另一种选择。您可以改为git revert
最近的提交。这将在分支的顶部添加 new 提交,这将撤消最近提交的任何内容。据推测,在GitHub中添加新提交时不会有任何问题。如果您想要这条路线,请尝试以下方法:
git revert HEAD
git push origin A
您的新分支图将保持如下:
remote: C1 -- C2 -- C3 -- C4 -- R
local: C1 -- C2 -- C3 -- C4 -- R
其中R
是还原提交C4
的提交。从功能上讲,这两个分支的行为就好像C4
和R
提交都没有,即:
local/remote: C1 -- C2 -- C3