交换分支在git

时间:2019-04-02 12:38:50

标签: git merge branch branching-and-merging

在合并时,我基本上希望在git repo中交换两个分支的角色。由于我的问题有很多潜在的解决方法,所以我将解释我的情况以避免出现X-Y问题:

我正在为已经过几次硬件修订的设备开发固件,这需要固件中的细微差异(大多数是常数)。 (相关的)硬件修订版是“ proto2”,“ proto3”和“ proto4”。原始的主分支称为“ master”,当前对应于硬件修订版“ proto2”。早在出现“ proto3”时,我创建了一个新的分支,(想象中的)“ proto3”。然后,我对“ proto3”分支进行了与新硬件修订版相关的更改,并继续在“ master”中针对修订版“ proto2”进行开发。这样,我便可以签出“ proto3”,将“ master”合并到其中,并获得具有“ proto3”兼容固件的新功能。从那以后,出现了“ proto4”,它又有一个变化(字面上是一线)。因此,现在我在“ master”中进行开发,然后必须始终合并对“ proto3”和“ proto4”的更改(这也意味着我必须在较旧的原型上进行开发)。

现在我们开始生产,“ proto4”将成为生产固件。但是,由于某些较旧的原型仍然很有用,因此我想实际交换分支的角色,即能够在分支“ proto4”中进行开发并从那里合并到“ master”,而无需引入相关的硬件以前将“ proto4”更改为“ master”所做的更改。

换句话说,否则是正常的合并,除了某些(旧)提交永远不会从“ proto4”合并到“ master”。

我可以想到几种方法来实现这一目标:

  1. 我总是可以总是从“ proto4”到“ master”中挑选新的提交。但是,每次回传更改时,我都需要记住这样做,而忘记它会导致混乱。
  2. 我可以将“ proto4”合并到“ master”,然后从“ master”中的“ proto4”还原与硬件相关的提交,即撤消更改。我将需要在提交日志中进行挖掘以找到那些更改,但这应该是可行的。

选项2似乎不是一种不合理的方法,因为这是一次性的麻烦,而且只有一次出错的机会。但是,我觉得应该有一个更简单的方法,我不必手动选择正确的提交来还原?

P.S .:我当然也要重命名分支,但是Switch branch names in git似乎涵盖了这一点,https://mohitgoyal.co/2018/04/07/swap-master-branch-with-another-branch-in-git/

可能更好

2 个答案:

答案 0 :(得分:0)

您可能会具备以下条件:

  • 将主代码视为通用代码,
  • 每个硬件都有一个proto#分支,并根据master的特定需求,
  • 当主服务器更改时,要么在其顶部重新建立proto分支(这将意味着强制推动和开发人员之间的良好通信),要么在每个分支中合并主服务器(这将使日志变得不那么整洁,并且使查看变得更加困难)一目了然proto分支是什么)
  • 也许将生产原型分支命名为production-proto#,以便快速知道哪个是生产原型

因此每个硬件都可以有自己的代码,而master只是通用部分。

要创建新硬件时,可以从master创建一个新分支。

当您要停止使用硬件时,只需删除其分支即可。

答案 1 :(得分:0)

我想出了一种方法:

首先,获取“ proto4”和“ master”当前首部之间的差异:

git diff proto4..master > diff.txt

然后将“ proto4”合并到“ master”中,即现在“ master”就是以前的“ proto4”。第一步完成,包括重命名。然后创建一个新分支“ proto2”,并签出“ proto2”。现在应用以前创建的差异:

git apply diff.txt

并使用适当的消息(即“重新创建的proto2固件”等)提交更改。

最后,作为清理步骤,您可以删除现在不需要的“ proto4”分支(可以再次检查diff master proto4是否为空)。