views:

145

answers:

3

Typical usage scenario:

I have master, branch_foo and branch_bar. All are up to date. Now, I do a "git checkout master" and work on a bug fix.

Lets say that fix was on a tracked file that is in the same state on all branches - ie. before the fix, a diff of the file from each branch results in no differences.

Is there a way to commit this fix to all branches?

+3  A: 

I expect git cherry-pick is what you want.

After committing the fix to the first branch, you can use git cherry-pick to merge it into each of the other branches.

This related question on SO may be of interest: Git & Working on multiple branches

Tim Henigan
Yeah I thought about git cherry-pick. Was just wondering if there was a quicker way.
carleeto
Thanks :) The related question was exactly what I needed.
carleeto
+7  A: 

The common approach to this is "merging upwards". From man gitworkflows:

Always commit your fixes to the oldest supported branch that require them. Then (periodically) merge the integration branches upwards into each other.

This gives a very controlled flow of fixes. If you notice that you have applied a fix to e.g. master that is also required in maint, you will need to cherry-pick it (using git-cherry-pick(1)) downwards. This will happen a few times and is nothing to worry about unless you do it very frequently.

The first method is of course preferred - it's good to have a commit in your repo only once, and to be able to see the history of how it got into each branch. Life isn't perfect, though, and you'll sometimes find yourself in the second category. If that situation becomes common enough, you could perhaps write a script like

multi-cherry-pick <commit> <branch> [<branch>...]

which checks out each branch in turn and cherry-picks the given commit.

Jefromi
+4  A: 

Yes, there is. Make this commit on separate topic (feature) branch (branching off oldest branch / earliest state), and then merge this topic branch into any branch you want.

This workflow is described for example in Never merging back blog post by Junio C Hamano (maintainer of Git).

That is roughly what Jefromi wrote wrote

Jakub Narębski
Thanks. Yeah, I did end up using topic branches. The accepted answer to the question Tim directed me to was also written by you and was exactly what I needed :)
carleeto