Merge branch 'gp/maint-rebase-p-onto'
* gp/maint-rebase-p-onto: Fix rebase -p --ontomaint
						commit
						d1926f63ec
					
				|  | @ -703,7 +703,7 @@ first and then run 'git rebase --continue' again." | |||
| 					preserve=t | ||||
| 					for p in $(git rev-list --parents -1 $sha1 | cut -d' ' -s -f2-) | ||||
| 					do | ||||
| 						if test -f "$REWRITTEN"/$p -a \( $p != $UPSTREAM -o $sha1 = $first_after_upstream \) | ||||
| 						if test -f "$REWRITTEN"/$p -a \( $p != $ONTO -o $sha1 = $first_after_upstream \) | ||||
| 						then | ||||
| 							preserve=f | ||||
| 						fi | ||||
|  |  | |||
|  | @ -0,0 +1,80 @@ | |||
| #!/bin/sh | ||||
| # | ||||
| # Copyright (c) 2009 Greg Price | ||||
| # | ||||
|  | ||||
| test_description='git rebase -p should respect --onto | ||||
|  | ||||
| In a rebase with --onto, we should rewrite all the commits that | ||||
| aren'"'"'t on top of $ONTO, even if they are on top of $UPSTREAM. | ||||
| ' | ||||
| . ./test-lib.sh | ||||
|  | ||||
| . ../lib-rebase.sh | ||||
|  | ||||
| # Set up branches like this: | ||||
| # A1---B1---E1---F1---G1 | ||||
| #  \    \             / | ||||
| #   \    \--C1---D1--/ | ||||
| #    H1 | ||||
|  | ||||
| test_expect_success 'setup' ' | ||||
| 	test_commit A1 && | ||||
| 	test_commit B1 && | ||||
| 	test_commit C1 && | ||||
| 	test_commit D1 && | ||||
| 	git reset --hard B1 && | ||||
| 	test_commit E1 && | ||||
| 	test_commit F1 && | ||||
| 	test_merge G1 D1 && | ||||
| 	git reset --hard A1 && | ||||
| 	test_commit H1 | ||||
| ' | ||||
|  | ||||
| # Now rebase merge G1 from both branches' base B1, both should move: | ||||
| # A1---B1---E1---F1---G1 | ||||
| #  \    \             / | ||||
| #   \    \--C1---D1--/ | ||||
| #    \ | ||||
| #     H1---E2---F2---G2 | ||||
| #      \             / | ||||
| #       \--C2---D2--/ | ||||
|  | ||||
| test_expect_success 'rebase from B1 onto H1' ' | ||||
| 	git checkout G1 && | ||||
| 	git rebase -p --onto H1 B1 && | ||||
| 	test "$(git rev-parse HEAD^1^1^1)" = "$(git rev-parse H1)" && | ||||
| 	test "$(git rev-parse HEAD^2^1^1)" = "$(git rev-parse H1)" | ||||
| ' | ||||
|  | ||||
| # On the other hand if rebase from E1 which is within one branch, | ||||
| # then the other branch stays: | ||||
| # A1---B1---E1---F1---G1 | ||||
| #  \    \             / | ||||
| #   \    \--C1---D1--/ | ||||
| #    \             \ | ||||
| #     H1-----F3-----G3 | ||||
|  | ||||
| test_expect_success 'rebase from E1 onto H1' ' | ||||
| 	git checkout G1 && | ||||
| 	git rebase -p --onto H1 E1 && | ||||
| 	test "$(git rev-parse HEAD^1^1)" = "$(git rev-parse H1)" && | ||||
| 	test "$(git rev-parse HEAD^2)" = "$(git rev-parse D1)" | ||||
| ' | ||||
|  | ||||
| # And the same if we rebase from a commit in the second-parent branch. | ||||
| # A1---B1---E1---F1----G1 | ||||
| #  \    \          \   / | ||||
| #   \    \--C1---D1-\-/ | ||||
| #    \               \ | ||||
| #     H1------D3------G4 | ||||
|  | ||||
| test_expect_success 'rebase from C1 onto H1' ' | ||||
| 	git checkout G1 && | ||||
| 	git rev-list --first-parent --pretty=oneline C1..G1 && | ||||
| 	git rebase -p --onto H1 C1 && | ||||
| 	test "$(git rev-parse HEAD^2^1)" = "$(git rev-parse H1)" && | ||||
| 	test "$(git rev-parse HEAD^1)" = "$(git rev-parse F1)" | ||||
| ' | ||||
|  | ||||
| test_done | ||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano