在合并时,我基本上希望在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”。
我可以想到几种方法来实现这一目标:
选项2似乎不是一种不合理的方法,因为这是一次性的麻烦,而且只有一次出错的机会。但是,我觉得应该有一个更简单的方法,我不必手动选择正确的提交来还原?
P.S .:我当然也要重命名分支,但是Switch branch names in git似乎涵盖了这一点,https://mohitgoyal.co/2018/04/07/swap-master-branch-with-another-branch-in-git/
可能更好答案 0 :(得分:0)
您可能会具备以下条件:
proto#
分支,并根据master
的特定需求,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
是否为空)。