我有一个本地的git仓库,最近提交了一次,然后推送到了共享仓库。只有在将其推送到共享仓库后,我才意识到犯了一个丑陋的错误。在修正源代码后,我很容易就在本地进行了修订:
git commit -C HEAD -a --amend
之后,我尝试了另一个git push origin,但出现了以下错误:
! [rejected] mybranch -> mybranch (non-fast forward)
什么是解决这种情况的最佳方法?
我有一个本地的git仓库,最近提交了一次,然后推送到了共享仓库。只有在将其推送到共享仓库后,我才意识到犯了一个丑陋的错误。在修正源代码后,我很容易就在本地进行了修订:
git commit -C HEAD -a --amend
! [rejected] mybranch -> mybranch (non-fast forward)
默认情况下,git不允许您将“倒回”分支末端的任何内容推送到分支中。换句话说,如果当前分支头不是分支末端的直接父级或祖先,则会拒绝推送。
您可以尝试使用-f
选项向git push
推送,或者使用具有前导“+”的refspec,例如git push origin +mybranch:mybranch
。
通常,远程存储库仍然不会允许此操作,因为您可能会冒失地推送不包括本地未保存的提交的分支末端,从而导致丢失提交。
您可以通过更改远程存储库上的配置参数receive.denyNonFastForwards
来覆盖此行为(假设您具有对远程存储库的适当访问权限)。
如果您没有这样的访问权限,您可以通过删除远程分支并重新创建它来实现此目的。
例如:
git push origin :mybranch
git push origin mybranch
receive.denyDeletes
。如果设置了该参数,则会防止这种潜在的危险解决方法起作用。push
命令中加上--force
参数。但是,在公共存储库上重写历史记录通常被认为是不良行为。git push origin +mybranch
关于 git reset
怎么样?