git-merge rich history recovery
Bryce Harrington
bryce.harrington at canonical.com
Wed Aug 14 23:57:13 UTC 2024
Athos raised an issue last week about how when annotating delta about
upstream status while doing git-ubuntu merges, if another package later
does a merge of the package and does not use git-ubuntu style, you can
lose the rich history (and thus also the annotation).
I mentioned this also happens frequently with packages suffering
git-ubuntu's "empty dir" bug (LP: #1917877). Several of the packages I
merge have this problem, so I've gotten accustomed to recovering the
rich history from my previous work. This is what I'm currently using:
##############
local last_remote
last_remote=$(git branch -a | grep -E "remotes/.*/merge-" | sort -V | tail -1 | xargs) || {
error "Could not determine last merge remote to base off of"
return 1
}
branch_name="${last_remote##*/}"
git checkout "${last_remote}" -b "${branch_name}" || {
error "Could not checkout '${branch_name}'"
return 1
}
git tag -f base || {
error "Failed to tag base"
return 1
}
git checkout ubuntu/devel || {
error "Could not checkout ubuntu/devel"
return 1
}
git rebase base || {
# TODO: If the conflict is with debian/patch/series,
# then likely we can just take the debian version and
# then append all the additional ubuntu patches to the end.
# TODO: If the conflict is with changelog, then take the ubuntu
# version of the file, and then prepend all Debian's
# new changelog entries on top.
# TODO: Then git add, and git rebase --continue
error "Could not rebase to base"
return 1
}
info "Successfully imported past merge work"
#############
That first step is going to need some adjustment, because it assumes YOU
were the last merger, and assumes my style of branch naming for merges
(i.e. "merge-" and alphanumerically sortable). So YMMV on that and TBD
to handle someone else as the last merger, but hopefully the above gives
some inspiration.
Bryce
More information about the ubuntu-server
mailing list