如何在错误的rebase之后修复混乱的git master?

时间:2014-04-04 13:50:07

标签: git gerrit

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

  • 我们都在使用master分支进行提交。
  • 我们为一些开发创建了一个单独的分支testbranch。
  • 过了一段时间,我们需要将testbranch重新设置为master来获取testbranch中所需的master中的一些更改。
  • 我们应该做的(我认为)是:
    • git rebase master testbranch
  • 但我们做的是:
    • git rebase testbranch master
    • git push origin HEAD:refs / for / testbranch
  • 我们现在意识到,我们已经完成了所有最近的主变更并将它们推到了所有测试分支的变化之上。
  • 我们遗憾地在几个月内完成了上述 4次,每次都有大量更新。
  • 我们现在已经完成了testbranch,并希望将testbranch中的所有更改合并为master。
  • 然而,这可能不起作用 - 可能很明显 - 因为testbranch已经拥有了master中的所有更改,并且文件和冲突的数量很大,并且get / gerrit(不确定哪个)一直给出合并错误。

此时:

  • 我们可以做些什么来恢复?
  • 我们应该挑选testbranch的所有变化吗?但是,当他们与主人的变化相混合时,我们如何识别它们呢?
  • 我们应该将master重命名为old_master并将testbranch重命名为new master吗?如果是这样,我们该怎么做?

非常感谢您的回答。

1 个答案:

答案 0 :(得分:1)

首先是快速PSA。您不应该在服务的存储库中重新定位分支。在您概述的场景中,您应该将master合并到testbranch中。这会将您的主更改添加到testbranch。通过重新定位,您将重写公共分支(由其他人克隆的分支)的历史记录,这将导致开发人员克隆您的存储库时无法解决问题。

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

如果testbranch上还有其他更改尚未被重新设置为master,那么您将要将这些更改合并到master。合并应该是直截了当的,因为master和testbranch通常是相同的,因为你以前的rebase。

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

或者,如果您可以验证testbranch是否具有您想要的所有更改,您可以尝试"重命名分支"计划你在问题中概述。要做到这一点:

  1. 选择"项目"来自gerrit顶级菜单
  2. 选择"分支"来自项目子菜单
  3. 创建一个名为old_master的分支并设置"初始版本"成为"掌握"。这将创建一个名为old_master的新分支,指向master当前指向的位置。您应该在分支列表中看到它,并使用与master相同的版本哈希。
  4. 选中" master"旁边的框并点击删除按钮删除分支主文件。
  5. 创建一个名为master的新分支,其初始版本为testbranch您应该在分支列表中看到master与testbranch相同的版本哈希
  6. 新主人现在与testbranch相同

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