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?
If you use git branches a lot, you'll often push each branch after each commit. Instead of pushing every single branch you can do git push --all origin . This will push all commits of all branches to origin.
Yes, two branches can point to the same commits.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With