繁体   English   中英

交换分支在git中合并

[英]Swap branch merges in git

在合并时,我想本质上在git repo中交换两个分支的角色。 由于有许多潜在的方法可以解决我的问题,因此我将解释我的情况以避免XY问题:

我正在为已经过几次硬件修订的设备开发固件,这需要固件中的细微差异(大多数是常数)。 (相关的)硬件修订版是“ 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似乎不是解决此问题的不合理方法,因为这是一次性的麻烦,而且只有一次出错的机会。 但是,我觉得应该有一个更简单的方法,我不必手动选择正确的提交来还原?

PS:我当然也要重命名分支,但是这似乎已被git中Switch分支名称所覆盖,甚至可能由https://mohitgoyal.co/2018/04/07/swap-master-分支与-另一个分支功能于混帐/

您是否可能具有以下条件:

  • 将master作为通用代码,
  • 每个硬件都有一个proto#分支,它们的特定需求都基于master
  • 当master更改时,要么在其顶部重新建立proto分支的基础(这将意味着强制推动和开发人员之间的良好通信),要么将master分支合并到每个分支中(这将使日志变得不那么整洁,一目了然什么是proto分支的特定内容)
  • 也许将生产原型分支命名为production-proto#以便迅速知道哪一个是产品

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

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

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

我想出了一种方法来做到这一点:

首先,以“ proto4”和“ master”的当前标题之间的区别为例:

git diff proto4..master > diff.txt

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

git apply diff.txt

并使用适当的消息(例如“ retoed proto2 firmware”等)提交更改。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM