我正在开发一个 Git 存储库,我们在master
分支之上有一个private
分支, 我们有尚未公开的提交。有时我们可以发布一些提交,我们必须挑选
git checkout master
git cherry-pick 6afeff5
...
然后,我们通常会在创建标记tag X.X.X
/release并将master
分支推送回存储库之前应用一些变基。问题是,在这样的程序之后,我们如何最好地将我们的private
分支再次建立在master
分支上(历史应该反映private
现在领先于tag X.X.X
)。如果我独自在private
分支上工作,我会简单地rebase
和push --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
时,如果需要,您可以根据需要进行双向合并(master
private
,然后private
合并到master
中),如果需要使private
进一步更新;如果你要玩樱桃挑选游戏,那应该会把事情理顺。
也许我在这里缺少您的一些要求,但恕我直言,这应该可以通过简单地master
合并到private
中来实现:
- 您在
private
上进行开发工作 - 要从
private
发布到master
的git cherry-pick
提交 git tag
发布新母版git merge master
private
- 重复
有了这个,你的分支树将如下所示:
* 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
。