在Git中为多个分支提交更改

时间:2009-10-06 19:30:41

标签: git one-to-many branch

典型使用场景:

我有master,branch_foo和branch_bar。一切都是最新的。现在,我做了一个“git checkout master”并开始修复bug。

让我们说修复是在所有分支上处于相同状态的跟踪文件 - 即。在修复之前,每个分支的文件差异不会产生任何差异。

有没有办法将此修复程序提交给所有分支?

3 个答案:

答案 0 :(得分:9)

这种做法的常见方法是“向上合并”。来自man gitworkflows

  

始终将修复程序提交到需要它们的最旧的受支持分支。然后(定期)将集成分支向上合并。

     

这提供了非常受控制的修复流程。如果您发现自己已将修复程序应用于例如在maint中也需要的主人,你需要向下挑选它(使用git-cherry-pick(1))。这种情况会发生几次,除非你经常这样做,否则无需担心。

第一种方法当然是首选 - 最好只在你的回购中提交一次,并且能够看到它如何进入每个分支的历史记录。然而,生活并不完美,你有时会发现自己属于第二类。如果这种情况变得很普遍,你也许可以写一个像

这样的脚本
multi-cherry-pick <commit> <branch> [<branch>...]

依次检出每个分支并挑选给定的提交。

答案 1 :(得分:5)

我希望git cherry-pick是你想要的。

将修复程序提交到第一个分支后,您可以使用git cherry-pick将其合并到每个其他分支中。

关于SO的这个相关问题可能会引起关注: Git & Working on multiple branches

答案 2 :(得分:5)

是的,有。在单独的主题(功能)分支(分离最旧的分支/最早状态)上进行此提交,然后将此主题分支合并到您想要的任何分支中。

此工作流程在Junio C Hamano(Git的维护者)的Never merging back博客文章中有描述。

这大致是Jefromi wrote写的