Re: [PATCH 3/4] git-commit-am: Allow automatic rebasing to preserve empty commits
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 30, 2012, 20:47 UTC
- Message-ID
- <7v8vihlssj.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <1333136922-12872-4-git-send-email-nhorman@tuxdriver.com>
Neil Horman <nhorman@tuxdriver.com> writes:
Show 31 quoted lines
> Using the keep_empy environment variable, this change allows git-commit-am to > apply empty commits to the new branch we are rebasing to > > Signed-off-by: Neil Horman <nhorman@tuxdriver.com> > CC: Jeff King <peff@peff.net> > CC: Phil Hord <phil.hord@gmail.com> > CC: Junio C Hamano <gitster@pobox.com> > --- > git-rebase--am.sh | 20 +++++++++++++++----- > 1 files changed, 15 insertions(+), 5 deletions(-) > > diff --git a/git-rebase--am.sh b/git-rebase--am.sh > index c815a24..c1d1b60 100644 > --- a/git-rebase--am.sh > +++ b/git-rebase--am.sh > @@ -20,11 +20,21 @@ esac > > test -n "$rebase_root" && root_flag=--root > > -git format-patch -k --stdout --full-index --ignore-if-in-upstream \ > - --src-prefix=a/ --dst-prefix=b/ \ > - --no-renames $root_flag "$revisions" | > -git am $git_am_opt --rebasing --resolvemsg="$resolvemsg" && > -move_to_original_branch > +if [ -n "$keep_empty" ] > +then > + # we have to do this the hard way. git format-patch completly squashes > + # empty commits and even if it didn't the format doesn't really lend > + # itself well to recording empty patches. fortunately, cherry-pick > + # makes this easy > + git cherry-pick --keep-empty "$revisions" && move_to_original_branch
Does cherry-pick know the "--ignore-if-in-upstream" trick? Otherwise I suspect that this will introduce a severe regression to the command, as the commits that are already in the new base you are rebasing to will all be kept as empty commits, no?
Show 11 quoted lines
> +else > + git format-patch -k --stdout --full-index --ignore-if-in-upstream \ > + --src-prefix=a/ --dst-prefix=b/ \ > + --no-renames $root_flag "$revisions" | > + git am $git_am_opt --rebasing --resolvemsg="$resolvemsg" && > + move_to_original_branch > +fi > + > ret=$? > test 0 != $ret -a -d "$state_dir" && write_basic_state > exit $ret