[PATCH] rebase -p: Preserve fast-forwardable merges
- From
- Alex Scarborough <alex@gameclay.com>
- Date
- Jan 23, 2010, 07:29 UTC
- Message-ID
- <dd10f5481001222329i58e7b709m2c547c74161b6771@mail.gmail.com>
Previously, rebase -p would not preserve a merge commit if the merge could be resolved as a fast-forward. rebase -p now passes --no-ff to git merge when recreating a merge commit, which ensures that merge commits created with git merge --no-ff are preserved.
Signed-off-by: Alex Scarborough <alex@gameclay.com> --- First patch, so here's hoping neither I nor my mail client messed up too much.
This patch will not apply cleanly to branches which do not have mh/rebase-fixup merged in, as that series removed the wrap of the line I changed.
git-rebase--interactive.sh | 2 +- t/t3416-rebase-preserve-fast-forwardable-merges.sh | 41 ++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletions(-) create mode 100755 t/t3416-rebase-preserve-fast-forwardable-merges.sh
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index c2f6089..a7a2acc 100755 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -343,7 +343,7 @@ pick_one_preserving_merges () { # No point in merging the first parent, that's HEAD new_parents=${new_parents# $first_parent} if ! do_with_author output \ - git merge $STRATEGY -m "$msg" $new_parents + git merge --no-ff $STRATEGY -m "$msg" $new_parents then printf "%s\n" "$msg" > "$GIT_DIR"/MERGE_MSG die_with_patch $sha1 "Error redoing merge $sha1" diff --git a/t/t3416-rebase-preserve-fast-forwardable-merges.sh b/t/t3416-rebase-preserve-fast-forwardable-merges.sh new file mode 100755 index 0000000..d46bf91 --- /dev/null +++ b/t/t3416-rebase-preserve-fast-forwardable-merges.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +test_description='git rebase preserve fastforwardable merges + +This test runs git rebase with -p and checks that merges created by +git merge --no-ff are properly carried along. +' +. ./test-lib.sh + +# set up three branches like this: +# +# A1 - C1 - - - E1 +# \ \ / +# \ -- D1 -- +# \ +# -- B1 + +test_expect_success 'setup' ' + test_commit A1 && + test_commit B1 && + git reset --hard A1 && + test_commit C1 && + test_commit D1 && + git reset --hard C1 && + test_tick && + git merge --no-ff -m "E1" "D1" && + git tag "E1" +' + +# Should result in: +# +# A1 - B1 - C2 - - - E2 +# \ / +# -- D2 -- +# +test_expect_success 'rebase C1 onto B1' ' + git rebase -p B1 && + git rev-parse HEAD^2 +' + +test_done
-- 1.6.6