如何在DVCS中跨分支移动错误修正?

gav*_*koa 8 git mercurial branch dvcs bazaar

如果我们发现某些分支中的错误,我们会修复它(请查看图片上的版本).但我们也有兴趣将此修复程序移动到版本和主要开发分支:

a-->b-->c              (Old release)
|    
A-->B-->C-->D           (Main release)
    |
    1-->2-->bugfix-->4  (New release)

svn记得在svn:merge属性(来自svn 1.6,2009)哪个版本合并到哪个分支.因此,下次如果您合并修订区域,则会从合并修补程序中跳过先前合并的修订.

如何应对现代DVCS?

我需要制作普通补丁并将其应用到每个分支机构或DVCS存在一些帮助吗?

注意:我不能将New branche 合并到Main,因为之前的更改集也会移动到Main branche.

Rebase也不可能,因为许多开发人员都会发布版本.

我有兴趣回答命名的braches模式和多存储库模式.

PS. Andy建议找到bug影响的所有分支的公共父级,更新它,对bug进行修复并将修复移动到受影响的分支.

通过更新到旧的变更集并进行更改,您可以创建新的分支.我建议创建命名分支(将其命名为bugID),以便稍后您可以轻松返回它.

找到我们有兴趣修复bug的所有分支的共同父母都有问题.

第一个解决方案(建议Andy)使用$ hg/git/bzr blame并仔细检查所有受影响文件的输出.这涉及到对第一BUG修复了一些最新的变更你找到之前什么变更引入的错误.然后,您需要将rebase fix(patch)修改为常见的父更改集.

另一个解决方案是使用$ hg/git/bzr bisect(您也可以手动执行更新以查找引入了错误的第一个修订版).这可以是扩展但更真实的解决方案,因为允许将bug修复到任何存在bug的分支.

我认为最好首先找到第一个BAD变更集,然后修复一个错误,而不是先修复一个错误然后找到第一个BAD变更集(除非您已经知道如何修复bug).引入差异也有助于理解它为什么会发生.

PPS.对于错误,很清楚哪个分支实现允许合并更改到任何受影响的分支.

如果询问从开发分支到发布分支的后端功能如何有趣的问题.如您所见,您必须在发布分支之前的changeset开始提交功能更改集.但是当你开发功能时,你可能不知道你需要哪种后端功能.使用svn:merge VCS记住你所有的backports.DVCS怎么样?

And*_*ndy 9

你可以:

  1. 寻找共同的父母.感谢Novelocrat这一步.
    git merge-base branch1 branch2 branch3 ...

  2. 结帐共同的父母
    git checkout A

  3. 创建新的分支来修复错误
    git checkout -b bugFix

  4. 修复错误并将其提交到bugFix分支

  5. 需要修复bug的Checkout分支
    git checkout branchToApplyFixTo

  6. 将bugFix合并到分支中
    git merge bugFix

  • Git有一个内置命令`merge-base`来查找提交/分支列表的共同祖先. (3认同)