Porting¶
If you add some feature to one branch and need to add it to anoher branch, then you have to make port.
See also:
Forward-port¶
It’s the simplest case. You merge commits from older branch (e.g. 8.0) to newer branch (e.g. 9.0)
git checkout 9.0
git merge origin/8.0
# [Resolve conflicts if needed]
git push
After git merge
you probably need to make some minor changes. In that case just add new commits to newer branch
git add ...
git commit -m "...."
git push
Back-port¶
If you need to port new feature from newer branch (e.g. 9.0) to older one (e.g. 8.0), then you have to make back-port.
The problem here is that newer branch has commits which should be applied for newer branch only. That is you cannot just make git merge 9.0
, because it brings 9.0-only commits to 8.0 branch. Possible solutions here are:
git cherry-pick¶
Apply commits from newer branch (e.g. 9.0) to older branch (e.g. 8.0)
git checkout 8.0
git cherry-pick <commit-1>
# [Resolve conflicts if needed]
git cherry-pick <commit-2>
# [Resolve conflicts if needed]
# ...
git push
Also possible to pick the commit from any remote repository. Add this repository to your remotes. Do fetch from it. And then cherry-pick.
cherry-pick range of commits¶
The command git cherry-pick A..B
applies commits betwwen A and B, but without A (A must be older than B). To apply inclusive range of commits use format as follows:
git cherry-pick A^..B
For example, to backport this PR https://github.com/it-projects-llc/odoo-saas-tools/pull/286/commits , use command:
git cherry-pick 6ee4fa07d4c0adc837d7061e09da14638d8abf8d^..9133939a25f9e163f52e6662045fc2dc6010ac14