Git 在主更新后管理并行分支



我正在开发一个 Git 存储库,我们在master分支之上有一个private分支, 我们有尚未公开的提交。有时我们可以发布一些提交,我们必须挑选

git checkout master
git cherry-pick 6afeff5
...

然后,我们通常会在创建标记tag X.X.X/release并将master分支推送回存储库之前应用一些变基。问题是,在这样的程序之后,我们如何最好地将我们的private分支再次建立在master分支上(历史应该反映private现在领先于tag X.X.X)。如果我独自在private分支上工作,我会简单地rebasepush --force-with-lease.但对于合作者来说,这不是一个好主意。

我想到的另一个选择是在每次这样的master发布一个新分支后创建

git checkout master
git checkout -b private_X.X.X

然后在private中应用我尚未在private_X.X.X上挑选的更改.只申请

git checkout private_X.X.X
git merge private

将导致我已经挑选的那些重复提交。 git 是否为此工作流提供自动解决方案?

或者是否有替代工作流,满足我们的要求(使用私有分支并且仅有选择地从该分支发布提交)更容易管理?

我建议使用标准的双轨开发流程:

  • master仅用于发布,并获取标记。

  • private用于开发,偶尔会合并到master中。

  • 每个在private上工作的人都必须创建一个分支;没有人必须直接提交到private除非是分支的合并。(通常这些将通过 PR。

这样,就不需要你说的变基了。每当需要将private合并到master时,如果需要,您可以根据需要进行双向合并(masterprivate,然后private合并到master中),如果需要使private进一步更新;如果你要玩樱桃挑选游戏,那应该会把事情理顺。

也许我在这里缺少您的一些要求,但恕我直言,这应该可以通过简单地master合并到private中来实现:

  • 您在private上进行开发工作
  • 要从private发布到mastergit cherry-pick提交
  • git tag发布新母版
  • git merge masterprivate
  • 重复

有了这个,你的分支树将如下所示:

* d781719 (private) feature 6
*   737a64b Merge branch 'master' into private
|  
| * e1f50e4 (tag: v0.2, master) feature 5
* | 8828158 feature 5
* | 84a90db feature 4
* | c1ca6cb private feature 2
* | 3b12ad7 Merge branch 'master' into private
|| 
| * 9c9466f (tag: v0.1) feature 3
| * c661974 feature 2
* | 15285bc feature 3
* | 2ef63d0 private feature 1
* | fd38cee feature 2
* | 9214751 feature 1
* | 52ff609 private config
|/  
* 1bd58c9 initial commit

虽然master分支本身看起来像这样

* e1f50e4 (tag: v0.2, master) feature 5
* 9c9466f (tag: v0.1) feature 3
* c661974 feature 2
* 1bd58c9 initial commit

有了git cherry,你可以看到private中的哪些提交仍然在master中丢失,即尚未cherry-pick

如果您在反复出现的合并冲突方面遇到问题,请查看git rerere

最新更新