【问题标题】:Error: Undo last git commit on both local and remote错误:撤消本地和远程上的最后一次 git 提交
【发布时间】:2016-02-27 21:10:22
【问题描述】:

假设我在本地 A 上有一个分支,它也存在于远程 origin/A 中。我的本地和远程分支都是同步的。例如,在本地我有提交 - C1C2C3C4,在我的遥控器中也是如此。

现在我想恢复我为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)

如何解决这个问题?

【问题讨论】:

  • GitHub 不允许您进行强制推送。您需要与您的管理员核实以请求执行此操作的权限(顺便说一下,您的 2 个命令是您想要执行的操作)。

标签: github local commit undo git-remote


【解决方案1】:

您当前删除最近提交的方法是完全正确的:

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 的提交。从功能上讲,这两个分支的行为就像 C4R 提交都不存在,即:

local/remote: C1 -- C2 -- C3

【讨论】:

  • 嗯!很高兴知道我正在使用beanstalk。让我试试你上面提到的第二种方法。 BRB。
  • 如果您想知道为什么不允许强制推送,很可能是因为您的管理员不允许开发人员重写在 GitHub 中公开的分支的历史记录。您可以向管理员请求执行此操作的权限,但从功能上讲,执行 git revert 就可以了。
猜你喜欢
  • 2017-10-03
  • 2016-09-22
  • 2021-12-26
  • 2010-10-29
相关资源
最近更新 更多