当前位置:  开发笔记 > 运维 > 正文

Git reset --hard和一个远程存储库

如何解决《Gitreset--hard和一个远程存储库》经验,为你挑选了2个好方法。

我有一个存储库,它有一些不好的提交(本例中为D,E和F).

ABCDEF主和原点/主

我专门用一个修改了本地存储库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 pushGit时,礼貌地给我刷掉了:

$ 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'  

如何让远程仓库获取本地仓库的当前状态?



1> Jakub Narębs..:

如果强制推送没有帮助(" git push --force origin"或" git push --force origin master"应该足够),则可能意味着远程服务器通过receive.denyNonFastForwards配置变量拒绝非快进推送(请参阅git config手册页以获取描述),或者通过更新/预接收挂钩.

使用较旧的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


我可以证明```git push --force origin master```可以起作用并且让我很头疼.
@JakubNarębski,谢谢.`得到恢复HEAD~N`帮助.`N`是提交的数量.例如,如果我需要先前的提交,我将使用`git revert HEAD~1`

2> Jealie..:

为了补充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

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有