在Git中将更改提交到多个分支

5

典型使用场景:

我有主分支,foo分支和bar分支。它们都是最新的状态。现在,我执行"git checkout master"并修复了一个bug。

假设此修复在一个已跟踪的文件上进行,在所有分支上其状态相同 - 也就是说,在修复之前,从每个分支对该文件进行差异比较不会出现差异。

是否有一种方法可以将此修复提交到所有分支中?

3个回答

9
常见的方法是“向上合并”。来自man gitworkflows的内容如下:

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

这样可以获得非常受控制的修复流程。如果您发现已经将修复应用于例如主分支,而在维护中也需要它,则需要使用git-cherry-pick(1)向下精选它。这会发生几次,并且除非您非常频繁地这样做,否则不必担心。

当然,首选第一种方法-仅在存储库中有一次提交,并且能够查看其进入每个分支的历史记录。但生活并不完美,有时您会发现自己处于第二种情况。如果这种情况变得足够普遍,您可以编写一个脚本,如下所示:
multi-cherry-pick <commit> <branch> [<branch>...]

该命令将逐个检查每个分支并挑选给定的提交。


5

我认为你需要的是 git cherry-pick

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

这个相关的stackoverflow问题可能会有所帮助: Git & Working on multiple branches


是的,我考虑过使用git cherry-pick。只是想知道是否有更快捷的方法。 - Carl
相关的问题正是我所需要的。谢谢 :) - Carl

5
是的,有一个方法。在一个独立的主题(feature)分支上进行此次提交(从最早的分支/最初的状态开始分支),然后将此主题分支合并到任何你想要的分支中。
例如,在Git的维护者Junio C Hamano的Never merging back博客文章中描述了这种工作流程。 这就是Jefromi所写的大致内容

谢谢。是的,我最终使用了主题分支。Tim指引我查看的问题的被采纳答案也是你写的,正是我所需要的 :) - Carl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接