2016-01-22 84 views
0

我正在努力将一些代码上传到qemu,它希望修补程序以小的可管理块发送邮件列表。因此,我在我的git存储库中有三个分支:git补丁管理工作流程:将已更新的修补程序队列分支中的更改移植到合并的功能分支

  • master,跟踪上游。
  • feature,有我所有的发展历史,包括尚未准备好上游的代码。这个定期与主人合并,并发布在github上。
  • upstreaming,补丁提交的待定队列,定期修改和重新发布反对主(因此,我不发布这一个,虽然每What's the Git approach to publish a patch queue?或许我可以这样做与一个合适的警告)。

每次我提交版本的补丁一系列的邮件列表,我得到的代码审查反馈和生成补丁系列的新版本之前(使用git rebase --interactivegit commit --amend)地址,在上游化分公司。这工作相当好。

但是,我还想保留feature分支最新的这些变化。理想情况下,我想在feature上记录一次提交,这相当于修补程序系列最后一次重新调整的所有更改,但是我还没有找到干净的方法来执行此操作。

如果我从upstreaming合并到feature,那么我需要每次手动解决大量的冲突,因为几乎(但不是完全)相同内容的相同文件似乎是独立创建的;即3路合并没有共同的祖先,也没有合并历史,因此新修订的每个后续合并似乎都重新引入了相同文件的稍微不同的副本。

我认为我想要做的是区分upstreaming分支的vN和vN + 1,然后将其作为单个补丁应用于特征分支。但(缺乏手动差异和补丁)我还没有发现任何东西在处理这个。

+1

或者使用[this](https://stackoverflow.com/a/34813665/2303202)来应用diff – max630

回答

1

我使用了一个技巧,但它并不理想。您重新装订upstreaming后,您可以git merge --strategy-ours ..它的老头。比它被记住为向前更新,可以合并。

缺点是:

  1. 它看起来在历史上丑陋。提交之前和之后都会提到所有提交,有时会混合使用。

  2. 你应该小心rebase只转发。例如,如果你在某个主人的提交A1上你upstreaming,并且你重新绑定到后来由A1的某个祖父A2的主人A2进行提交。然后合并 - 我们的旧版upstreaming即可。但是当你将它重定位到其他分支B1,或者先前在主A0中进行提交时,则不能合并较早的upstreaming,否则它会在A1合并之前考虑一些历史记录,但事实上并没有发生变化。

+0

谢谢!其实,[评论中链接的技巧](https://stackoverflow.com/a/34813665/2303202)似乎是我目前的最佳选择。丑陋的历史是我想在上游分支上避免的事情。 –

相关问题