我正在使用 git-flow 来维护我的分支,因此我有一个大师和开发分支。
开发是在 master 之前的几个提交(~50-100)。
但是,需要提前将选择性功能从开发阶段带到掌握阶段。
我怎样才能做到这一点?应该使用cherry-pick吗?如果我在最终合并回 master 之前再次在 master 上重新开发会发生什么?
您是否考虑过创建另一个开发分支只是为了集成这些特定功能,然后使用rebase -i
删除您不想要的提交,或者将您想要的提交挑选到该分支中?
似乎您甚至可以使用 git flow release 分支来执行此操作,但如果您这样做,则必须使用交互式 rebase/removal 方法。这不是发布的预期方式,但至少可以保持 master 干净。
在http://dymitruk.com/blog/2012/02/05/branch-per-feature/中很好地记录了在发布时删除更改的过程,特别是在标题为“取出功能比放入功能更强大”的部分中在”。如果您的功能不是从同一次提交开始的(如果您遵循 git-flow,它们可能不是),您可能会遇到困难。但是您可以尝试充分利用它。
$ git checkout -b reduced_functionality_branch develop
$ git rebase -i sha1-for-previous-release-point
...remove the stuff you don't want...
此时,reduce_functionality_branch 应该只包含您想要发布的提交。
在这种情况下,Cherry-pick 确实应该可以正常工作。当您变基时,看起来就像在其余工作之前提交了精心挑选的更改,但这就是您通过任何变基得到的。
正如 CharlesB 所说,樱桃采摘到 master 并不完全符合 git-flow 模型。但这并不遥远,它是解决您的特定问题的一种很好的简单方法。
您可以使用“git cherry-pick”
请注意,由于您带来了选择性提交,因此源分支上的提交必须是完整的。您也可能会遇到一些合并冲突。
在 dev 和 master 分支中使用 .gitattributes 并放在下面的代码
<file which is branch specific> merge=ours
运行以下命令
git config --global merge.ours.driver true
下次合并分支时,所有东西都会被合并,除了<file which is branch specific>