我有一个本地git仓库,我最近做了一个提交,然后推送到共享仓库。只有当我把它推到共享回购站后,我才意识到我犯了一个很丑陋的错误。我修改它在本地没有问题后,我定我的源与:修改共享库的Git提交
git commit -C HEAD -a --amend
在那之后,我尝试另一个混帐推出身,我得到以下错误:
! [rejected] mybranch -> mybranch (non-fast forward)
什么是纠正这种最好的方式情况?
我有一个本地git仓库,我最近做了一个提交,然后推送到共享仓库。只有当我把它推到共享回购站后,我才意识到我犯了一个很丑陋的错误。我修改它在本地没有问题后,我定我的源与:修改共享库的Git提交
git commit -C HEAD -a --amend
在那之后,我尝试另一个混帐推出身,我得到以下错误:
! [rejected] mybranch -> mybranch (non-fast forward)
什么是纠正这种最好的方式情况?
如何git reset
?
Git不会(默认)允许你推到一个分支任何“倒带”分支的顶端。换句话说,如果当前的分支机构不是分支机构的直接父母或祖先,那么推送将被拒绝。
您可以尝试使用-f
选项至git push
,或者使用具有前导'+'的refspec。 git push origin +mybranch:mybranch
。
通常远程仓库仍然不会让这种情况发生,因为你可能会失去,如果提交不同的人可以肆意地推动枝梢不包括承诺,他们没有在当地有。
您可以通过更改配置参数receive.denyNonFastForwards
在远端仓库覆盖此行为(假设你有到远程仓库的appropraite访问)。
如果您没有这种访问权限,您可以可能能够通过删除远程分支并重新创建它来实现此目的。
例如
git push origin :mybranch
git push origin mybranch
注意,最近的Git版本包括一个配置参数receive.denyDeletes
会,如果设置,防止这种潜在危险的解决方法无法正常工作。
如果要强制推送,你可以... ... EHM通过--force
到push
。
但是,它通常被认为是不好的形式重写一个公共仓库的历史。
假设你的共享回购允许,只是前缀分支名称与一个加号,以迫使非快速向前推:
git push origin +mybranch
在这种情况下,它可能是最好只是做一个与第二承诺固定。由于您已经更改了本地存储库中的原始第一次提交,因此您可能希望将其从共享存储库中提取出来,并移动HEAD以便您的更改的提交可以被垃圾收集。
不错,我不知道关于denyNonFastForwards:我以为你需要一个钩子来强制执行。 – araqnid 2009-05-01 01:01:28