[英]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”。
我可以想到几种实现此目的的方法:
选项2似乎不是解决此问题的不合理方法,因为这是一次性的麻烦,而且只有一次出错的机会。 但是,我觉得应该有一个更简单的方法,我不必手动选择正确的提交来还原?
PS:我当然也要重命名分支,但是这似乎已被git中的Switch分支名称所覆盖,甚至可能由https://mohitgoyal.co/2018/04/07/swap-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.