Browse Source

rebase -i: ignore patches that are already in the upstream

Non-interactive rebase had this from the beginning -- match it by
using --cherry-pick option to rev-list.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Johannes Schindelin 18 years ago committed by Junio C Hamano
parent
commit
96ffe892e3
  1. 5
      git-rebase--interactive.sh
  2. 15
      t/t3404-rebase-interactive.sh

5
git-rebase--interactive.sh

@ -463,8 +463,9 @@ do
# #
EOF EOF
git rev-list $MERGES_OPTION --pretty=oneline --abbrev-commit \ git rev-list $MERGES_OPTION --pretty=oneline --abbrev-commit \
--abbrev=7 --reverse $UPSTREAM..$HEAD | \ --abbrev=7 --reverse --left-right --cherry-pick \
sed "s/^/pick /" >> "$TODO" $UPSTREAM...$HEAD | \
sed -n "s/^>/pick /p" >> "$TODO"


test -z "$(grep -ve '^$' -e '^#' < $TODO)" && test -z "$(grep -ve '^$' -e '^#' < $TODO)" &&
die_abort "Nothing to do" die_abort "Nothing to do"

15
t/t3404-rebase-interactive.sh

@ -68,6 +68,9 @@ test "\$1" = .git/COMMIT_EDITMSG && {
test -z "\$FAKE_COMMIT_AMEND" || echo "\$FAKE_COMMIT_AMEND" >> "\$1" test -z "\$FAKE_COMMIT_AMEND" || echo "\$FAKE_COMMIT_AMEND" >> "\$1"
exit exit
} }
test -z "\$EXPECT_COUNT" ||
test "\$EXPECT_COUNT" = \$(grep -ve "^#" -e "^$" < "\$1" | wc -l) ||
exit
test -z "\$FAKE_LINES" && exit test -z "\$FAKE_LINES" && exit
grep -v "^#" < "\$1" > "\$1".tmp grep -v "^#" < "\$1" > "\$1".tmp
rm "\$1" rm "\$1"
@ -251,4 +254,16 @@ test_expect_success 'interrupted squash works as expected' '
test $one = $(git rev-parse HEAD~2) test $one = $(git rev-parse HEAD~2)
' '


test_expect_success 'ignore patch if in upstream' '
HEAD=$(git rev-parse HEAD) &&
git checkout -b has-cherry-picked HEAD^ &&
echo unrelated > file7 &&
git add file7 &&
test_tick &&
git commit -m "unrelated change" &&
git cherry-pick $HEAD &&
EXPECT_COUNT=1 git rebase -i $HEAD &&
test $HEAD = $(git rev-parse HEAD^)
'

test_done test_done

Loading…
Cancel
Save