交换分支在git中合并

问题描述 投票:2回答:2

在合并时,我想基本上在git仓库中交换两个分支的角色。由于我的问题可以解决的方法很多,我只会解释我的情况以避免X-Y问题:

我正在为一个经过多次硬件修订的设备开发固件,这需要在固件中有细微差别(主要是不同的常量)。 (相关)硬件修订版是“proto2”,“proto3”和“proto4”。原始主分支称为“主”,并且当前对应于硬件修订“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/

git merge branch branching-and-merging
2个回答
0
投票

您是否有可能拥有以下内容:

  • 考虑master作为遗传密码,
  • 每个硬件都有一个proto#分支,满足他们的特定需求,所有这些都基于master
  • 当master更改时,要么将proto分支重新绑定在它上面(意味着强制推送和devs之间的良好通信),要么在每个中合并master(会使一个不太干净的日志,并使得一目了然更难看什么具体的proto分支)
  • 也许有一个名为production-proto#的生产proto分支,以便快速了解哪一个是prod one

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

如果要创建新硬件,可以从master创建新分支。

当你想要停止使用硬件时,只需要删除它的分支即可。


0
投票

我想出了一种方法:

首先,采用“proto4”和“master”的当前头之间的差异:

git diff proto4..master > diff.txt

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

git apply diff.txt

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

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

© www.soinside.com 2019 - 2024. All rights reserved.