我有一个本地的git repo,我最近提交了一个,然后推送到一个共享repo。只有在我把它推到共享回收站后,我才意识到我犯了一个丑陋的错误。我在本地修改了它,在我修复了我的源码后没有问题:
git commit -C HEAD -a --amend在那之后,我尝试了另一个git推送来源,我得到了以下错误:
! [rejected] mybranch -> mybranch (non-fast forward)纠正这种情况的最好方法是什么?
发布于 2009-04-30 20:41:34
git (默认情况下)不允许您将任何“倒回”分支提示的内容推送到分支。换句话说,如果当前分支头部不是分支尖端的直接父代或祖先,则推送将被拒绝。
你可以通过使用git push的-f选项或者使用带有前导'+‘的refspec来尝试推送,例如git push origin +mybranch:mybranch。
通常,远程存储库仍然不会允许这种情况发生,因为如果不同的人可以不加区别地推送不包括本地没有的提交的分支提示,您将面临丢失提交的风险。
您可以通过更改远程存储库上的配置参数receive.denyNonFastForwards来覆盖此行为(假设您拥有对远程存储库的适当访问权限)。
如果您没有这样的访问权限,则可以通过删除远程分支并重新创建它来实现此目的。
例如:
git push origin :mybranch
git push origin mybranch请注意,较新版本的git包含一个配置参数receive.denyDeletes,如果设置该参数,将阻止此潜在危险的变通方法工作。
发布于 2009-04-30 20:41:56
如果你想强行推送,你可以...嗯..。将--force传递给push。
然而,在公共存储库上重写历史通常被认为是不好的形式。
发布于 2009-04-30 20:54:35
在这种情况下,最好是使用修复程序进行第二次提交。由于您已经在本地存储库中更改了原始的第一次提交,因此您可能希望将其从共享存储库中拉出并移动HEAD,以便可以对更改后的提交进行垃圾回收。
https://stackoverflow.com/questions/808877
复制相似问题