All of lore.kernel.org
 help / color / mirror / Atom feed
* 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.