如何修复错误的重基后混乱的git主机?

如何修复错误的重基后混乱的git主机?,git,gerrit,Git,Gerrit,我们正在使用git(和gerrit),但项目中的每个人都是git新手,这就是我们犯下以下错误的原因: 我们都在使用主分支进行提交 我们为某些方面的开发创建了一个单独的分支testbranch 过了一段时间,我们需要将testbranch重设为master,以获取testbranch中所需的master中的一些更改 我认为我们应该做的是: git rebase主测试分支 然而,我们所做的是: git rebase测试分支主机 git推送原点标头:refs/for/testbranch 我

我们正在使用git(和gerrit),但项目中的每个人都是git新手,这就是我们犯下以下错误的原因:

  • 我们都在使用主分支进行提交
  • 我们为某些方面的开发创建了一个单独的分支testbranch
  • 过了一段时间,我们需要将testbranch重设为master,以获取testbranch中所需的master中的一些更改
  • 我认为我们应该做的是:
    • git rebase主测试分支
  • 然而,我们所做的是:
    • git rebase测试分支主机
    • git推送原点标头:refs/for/testbranch
  • 我们现在意识到,它接受了所有最近的主更改,并将它们推到了所有testbranch更改之上
  • 不幸的是,在几个月的时间里,我们总共做了4次以上的更新,每次都有大量的更新
  • 我们现在已经完成testbranch,希望将testbranch中的所有更改合并回master
  • 然而,这不起作用-可能很明显-因为testbranch中已经有了来自master的所有更改,并且文件和冲突的数量非常大,并且get/gerrit(不确定是哪个)不断给出合并错误
在这一点上:

  • 我们能做些什么来恢复
  • 我们是否应该从testbranch中挑选所有更改?但是,当它们与基于master的更改混合在一起时,我们如何识别它们呢
  • 我们是否应该将master重命名为old_master,并将testbranch重命名为新master?如果是,我们如何做到这一点

非常感谢您的回答。

首先请快速阅读PSA。您不应该在已服务的存储库中重新设置分支的基址。在您概述的场景中,您应该将master合并到testbranch中。这将把您的主更改添加到testbranch上。通过重定基址,您正在重新编写公共分支(由其他人克隆的分支)的历史记录,这将给克隆存储库的开发人员带来无尽的问题

这就是说,如果您成功地将master重设为testbranch,那么master应该拥有master+testbranch的所有更改。我想这就是你想要的。您应该能够验证master是否具有您想要的所有更改(即所有testbranch更改),如果是这种情况,那么您可以使用当前master继续前进

如果testbranch上还有其他更改没有被重设为master,那么您需要将这些更改合并到master。合并应该是直截了当的,因为master和testbranch通常是相同的,这是由于您以前的调整

您得到合并冲突的事实很奇怪。我建议在尝试合并时创建一个新的克隆。您针对公共存储库所做的重定基调可能会混淆任何正在提取/获取更改的克隆

或者,如果您可以验证testbranch是否具有您想要的所有更改,您可以尝试在问题中概述的“重命名分支”计划。为此:

  • 从gerrit顶部菜单中选择“项目”
  • 从项目子菜单中选择“分支”
  • 创建一个名为old_master的分支,并将“初始修订”设置为“master”。这将创建一个名为old_master的新分支,指向master当前指向的位置。您应该在分支列表中看到它,其修订哈希与主目录相同
  • 选中“主”旁边的框并点击删除按钮以删除分支主控
  • 创建一个名为master的新分支,初始修订为testbranch。您应该在分支列表中看到master,其修订哈希与testbranch相同
  • 新主机现在与testbranch相同


    您需要告诉所有开发人员创建一个新的克隆并停止使用任何旧的克隆。

    您能(尽可能简单和最少地)确定在这个阶段您的提交历史记录是什么样子吗?master的提交历史记录很简单-它只包含提交到其中的项目。testbranch的提交历史基本上是在testbranch中进行的一组更改,然后是来自master的一组更改,重复4次。从视觉上看,它看起来像一团乱麻。