* git rebase--interactive, doesn't ignore commits already in upstream
@ 2007-08-01 11:28 Mark Levedahl
2007-08-01 14:59 ` [PATCH] rebase -i: ignore patches that are in upstream already Johannes Schindelin
0 siblings, 1 reply; 2+ messages in thread
From: Mark Levedahl @ 2007-08-01 11:28 UTC (permalink / raw)
To: Git Mailing List
git rebase -i does not correctly ignore commits in the local branch that
are also in upstream. For example, create a branch that is two commits
back from upstream, add one of those on to the local branch
upstream=83b3df7d58
git checkout -f $upstream
git checkout -b foo $upstream~2
git cherry-pick $upstream~1
git rebase -i $upstream
"git rebase -i" happily presents commit "$upstream~1" in the list to be
applied to upstream. This of course results in a conflict. Should the
user simply delete the offending commit from the presented list, git
rebase -i then refuses to do anything, saying "Nothing to do."
Bare "git rebase" handles this case correctly (essentially fast forwards
the branch to upstream.
Mark
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH] rebase -i: ignore patches that are in upstream already
2007-08-01 11:28 git rebase--interactive, doesn't ignore commits already in upstream Mark Levedahl
@ 2007-08-01 14:59 ` Johannes Schindelin
0 siblings, 0 replies; 2+ messages in thread
From: Johannes Schindelin @ 2007-08-01 14:59 UTC (permalink / raw)
To: Mark Levedahl; +Cc: Git Mailing List
Non-interactive rebase had this already, exploiting format-patch's option
--ignore-if-in-upstream. We replicate the same behaviour here with
--cherry-pick.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
On Wed, 1 Aug 2007, Mark Levedahl wrote:
> git rebase -i does not correctly ignore commits in the local
> branch that are also in upstream. For example, create a branch
> that is two commits back from upstream, add one of those on to
> the local branch
>
> upstream=83b3df7d58
> git checkout -f $upstream
> git checkout -b foo $upstream~2
> git cherry-pick $upstream~1
> git rebase -i $upstream
>
> "git rebase -i" happily presents commit "$upstream~1" in the
> list to be applied to upstream. This of course results in a
> conflict. Should the user simply delete the offending commit
> from the presented list, git rebase -i then refuses to do
> anything, saying "Nothing to do."
>
> Bare "git rebase" handles this case correctly (essentially fast
> forwards the branch to upstream.
Right.
git-rebase--interactive.sh | 5 +++--
t/t3404-rebase-interactive.sh | 15 +++++++++++++++
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 061cd0a..d3addd4 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -463,8 +463,9 @@ do
#
EOF
git rev-list $MERGES_OPTION --pretty=oneline --abbrev-commit \
- --abbrev=7 --reverse $UPSTREAM..$HEAD | \
- sed "s/^/pick /" >> "$TODO"
+ --abbrev=7 --reverse --left-right --cherry-pick \
+ $UPSTREAM...$HEAD | \
+ sed -n "s/^>/pick /p" >> "$TODO"
test -z "$(grep -ve '^$' -e '^#' < $TODO)" &&
die_abort "Nothing to do"
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index 817f614..dc436d7 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -68,6 +68,9 @@ test "\$1" = .git/COMMIT_EDITMSG && {
test -z "\$FAKE_COMMIT_AMEND" || echo "\$FAKE_COMMIT_AMEND" >> "\$1"
exit
}
+test -z "\$EXPECT_COUNT" ||
+ test "\$EXPECT_COUNT" = \$(grep -ve "^#" -e "^$" < "\$1" | wc -l) ||
+ exit
test -z "\$FAKE_LINES" && exit
grep -v "^#" < "\$1" > "\$1".tmp
rm "\$1"
@@ -251,4 +254,16 @@ test_expect_success 'interrupted squash works as expected' '
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
--
1.5.3.rc3.112.gf60b6
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2007-08-01 15:00 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-01 11:28 git rebase--interactive, doesn't ignore commits already in upstream Mark Levedahl
2007-08-01 14:59 ` [PATCH] rebase -i: ignore patches that are in upstream already Johannes Schindelin
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.