硬和远程存储库
我有一个仓库,它有一些不好的提交(在这个例子中是D,E和F)。
ABCDEF主站和起点/主站
我用git reset --hard
修改了本地存储库git reset --hard
。 我在复位前拿了一个分支,现在我有一个回购看起来像:
A-B-C master
D-E-F old_master
A-B-C-D-E-F origin/master
现在我需要那些不好的提交的一些部分,所以我樱桃选择了我需要的位,并做了一些新的提交,所以现在我在本地具有以下内容:
A-B-C-G-H master
D-E-F old_master
现在我想把这种情况推向远程回购。 然而,当我尝试做一个git push
Git礼貌地给我刷了:
$ git push origin +master:master --force
Total 0 (delta 0), reused 0 (delta 0)
error: denying non-fast forward refs/heads/master (you should pull first)
To git@git.example.com:myrepo.git
! [remote rejected] master -> master (non-fast forward)
error: failed to push some refs to 'git@git.example.com:myrepo.git'
我如何获得远程回购以获取当地回购的当前状态?
如果强制推送不起作用(“ git push --force origin
”或“ git push --force origin master
”应该足够了),这可能意味着远程服务器拒绝通过接收进行非快进推送。 denyNonFastForwards配置变量(请参阅git配置手册页的描述),或通过更新/预接收钩子。
使用较旧的Git,您可以通过删除“ git push origin :master
”(请参阅分支名称前的':'),然后重新创建分支中的“ git push origin master
”来解决该限制。
如果你不能改变这个,那么唯一的解决方案就是不用重写历史记录来创建一个在DEF中恢复更改的提交 :
A-B-C-D-E-F-[(D-E-F)^-1] master A-B-C-D-E-F origin/master
为了补充Jakub的回答,如果你有权访问ssh中的远程git服务器,你可以进入git远程目录并设置:
user@remote$ git config receive.denyNonFastforwards false
然后回到本地仓库,再次尝试使用--force
进行提交:
user@local$ git push origin +master:master --force
最后,将服务器的设置恢复到原始保护状态:
user@remote$ git config receive.denyNonFastforwards true
通过重命名分支,将其与“所需主人”交换更方便,而不是修复“主”分支。 请参阅https://stackoverflow.com/a/2862606/2321594。 这样你甚至不会留下任何多个恢复日志的痕迹。
链接地址: http://www.djcxy.com/p/48923.html上一篇: hard and a remote repository
下一篇: How to permanently remove few commits from remote branch