Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 本地分支从原始分支发散,但我不想合并/快进_Git - Fatal编程技术网

Git 本地分支从原始分支发散,但我不想合并/快进

Git 本地分支从原始分支发散,但我不想合并/快进,git,Git,已将多个提交推送到源分支。这些提交包含导致问题的代码。为了解决这个问题,我在问题开始之前对提交做了git reset--hard 我已经解决了这个问题,并在当地做出了承诺。现在我想推到Origin,但我不能,因为我的分支落后于Origin 5次提交(这导致了问题),领先于Origin 1次提交(修复提交)。分叉的树枝 我不想合并来自原点的任何更改。如何将源代码的头设置为本地提交的头,而不将中断的提交合并到本地分支中 谢谢 干净的方式(保存历史) 在当前提交时创建本地错误修复分支 检查主控台(或任

已将多个提交推送到源分支。这些提交包含导致问题的代码。为了解决这个问题,我在问题开始之前对提交做了
git reset--hard

我已经解决了这个问题,并在当地做出了承诺。现在我想推到Origin,但我不能,因为我的分支落后于Origin 5次提交(这导致了问题),领先于Origin 1次提交(修复提交)。分叉的树枝

我不想合并来自原点的任何更改。如何将源代码的头设置为本地提交的头,而不将中断的提交合并到本地分支中

谢谢

干净的方式(保存历史)

  • 在当前提交时创建本地错误修复分支
  • 检查主控台(或任何原点),并将其快速向前拉至损坏的遥控头
  • git revert
    bad提交(从您分叉的最后一个好sha到远程头部之间的所有内容)。。。这将删除不需要的更改,同时保留所有历史记录
  • 将您的错误修复分支合并到master:现在所有master的更改都已恢复,这将是一个简单的合并
  • 肮脏的方式(丢弃历史记录,扰乱在远程分支上工作的任何其他人)

  • 只需使用
    gitpush-f
    (仔细检查您是否有正确的选项&refspec),并希望没有其他人在其下面更改了远程分支历史记录

  • 如果您不想丢弃其他人在这些错误提交中所做的事情,即保留历史记录,而只是拒绝在那里发生的更改,您可以使用
    ours
    合并策略:

    git merge -s ours badbranch
    
    这实质上创建了一个合并提交,该提交只接受当前分支中的所有更改,并进行修改。它将完全忽略在
    badbranch
    上发生的事情,但仍会将这些事件合并到历史记录中。因此,您可以查找在那里发生的更改,但这些更改不会影响您当前的版本

    否则,如果您只想完全丢弃它们,并且如果您完全控制存储库,而不关心从存储库中提取的其他人,则可以覆盖该分支,从本质上从存储库中删除这些提交(除非您有另一个分支指向它)。您可以通过强制推送来实现:

    git push origin master -f
    

    请注意,这将为在存储库中工作的所有其他人(他们可能已经获取了这些更改)造成冲突,因此不要这样做,除非您真正意识到这一点。通常最好在历史记录中保留错误提交。

    谢谢git-push-f'完成了这个任务。我导致了中断并应用了修复(现在),因此不需要保留中断更改。出于兴趣,如果其他人的远程分支历史在其下面发生了更改,那么会出现什么问题?他们将无法再推动,因为他们的头部不再与远程头部相关(也不是另一个的祖先,尽管他们在您的上一个好sha中共享一个共同的祖先)。他们最好的选择是将更改重新设置基址或挑选到新的远程分支上。您通常避免使用
    git push-f
    ,原因与您永远不会对已发布的提交重新设置基址相同。如果有人使用旧版本,他们的存储库就会处于需要手动修复才能恢复到可以与其他存储库交互的状态。我认为rebase可能会起作用,但我不确定它如何与远程分支一起工作。谢谢你们两位的帮助!