I need to maintain a few stable release branches in addition to the
master branch. Sometimes a bug is found and the fix needs applied to
multiple branches. I would like to be able to list what branches the
fix has been applied to to validate that it went in everywhere it was
needed, but after cherry-picking the fix from master to the stable
branches, the SHA1 of the commit is different, and so git branch
--contains does not think the commit was applied to each of the stable
branches.
Is there a way around this? Why doesn't git-cherrypick record the
original SHA1 it was picked from in the commit?
Why doesn't git-cherrypick record the original SHA1 it was picked from in the commit?
It does if you specify "-x" option to cherry-pick
See the man for git-cherry-pick:
-x
When recording the commit, append a line that says "(cherry picked from commit ...)" to the
original commit message in order to indicate which commit this change was cherry-picked from.
This is done only for cherry picks without conflicts. Do not use this option if you are
cherry-picking from your private branch because the information is useless to the recipient. If
on the other hand you are cherry-picking between two publicly visible branches (e.g. backporting
a fix to a maintenance branch for an older release from a development branch), adding this
information can be useful.
Why doesn't git-cherrypick record the original SHA1 it was picked from in the commit?
It does if you specify "-x" option to cherry-pick
See the man for git-cherry-pick:
[...]
Right. As an interesting historical note, git has been omitting the
original object name by default when cherry-picking/ reverting since
abd6970a (cherry-pick: make -r the default, 2006-10-05).
-- Ram
From: Jonathan Nieder <hidden> Date: 2016-06-15 22:52:18
Hi,
Phillip Susi wrote:
Sometimes a bug is found and the fix needs applied to multiple
branches. I would like to be able to list what branches the fix has been
applied to to validate that it went in everywhere it was needed, but after
cherry-picking the fix from master to the stable branches, the SHA1 of the
commit is different, and so git branch --contains does not think the commit
was applied to each of the stable branches.
If you base the fix on the oldest commit you think you might ever want to
apply it to, then you can reuse the same bugfix commit in all branches.
See gitworkflows(7) for more on this.
Hope that helps, and good luck,
Jonathan