硬和远程存储库

我有一个仓库,它有一些不好的提交(在这个例子中是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