105 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| test_description='git rebase --onto A...B'
 | |
| 
 | |
| . ./test-lib.sh
 | |
| . "$TEST_DIRECTORY/lib-rebase.sh"
 | |
| 
 | |
| # Rebase only the tip commit of "topic" on merge base between "master"
 | |
| # and "topic".  Cannot do this for "side" with "master" because there
 | |
| # is no single merge base.
 | |
| #
 | |
| #
 | |
| #	    F---G topic                             G'
 | |
| #	   /                                       /
 | |
| # A---B---C---D---E master      -->       A---B---C---D---E
 | |
| #      \   \ /
 | |
| #	\   x
 | |
| #	 \ / \
 | |
| #	  H---I---J---K side
 | |
| 
 | |
| test_expect_success setup '
 | |
| 	test_commit A &&
 | |
| 	test_commit B &&
 | |
| 	git branch side &&
 | |
| 	test_commit C &&
 | |
| 	git branch topic &&
 | |
| 	git checkout side &&
 | |
| 	test_commit H &&
 | |
| 	git checkout master &&
 | |
| 	test_tick &&
 | |
| 	git merge H &&
 | |
| 	git tag D &&
 | |
| 	test_commit E &&
 | |
| 	git checkout topic &&
 | |
| 	test_commit F &&
 | |
| 	test_commit G &&
 | |
| 	git checkout side &&
 | |
| 	test_tick &&
 | |
| 	git merge C &&
 | |
| 	git tag I &&
 | |
| 	test_commit J &&
 | |
| 	test_commit K
 | |
| '
 | |
| 
 | |
| test_expect_success 'rebase --onto master...topic' '
 | |
| 	git reset --hard &&
 | |
| 	git checkout topic &&
 | |
| 	git reset --hard G &&
 | |
| 
 | |
| 	git rebase --onto master...topic F &&
 | |
| 	git rev-parse HEAD^1 >actual &&
 | |
| 	git rev-parse C^0 >expect &&
 | |
| 	test_cmp expect actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'rebase --onto master...' '
 | |
| 	git reset --hard &&
 | |
| 	git checkout topic &&
 | |
| 	git reset --hard G &&
 | |
| 
 | |
| 	git rebase --onto master... F &&
 | |
| 	git rev-parse HEAD^1 >actual &&
 | |
| 	git rev-parse C^0 >expect &&
 | |
| 	test_cmp expect actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'rebase --onto master...side' '
 | |
| 	git reset --hard &&
 | |
| 	git checkout side &&
 | |
| 	git reset --hard K &&
 | |
| 
 | |
| 	test_must_fail git rebase --onto master...side J
 | |
| '
 | |
| 
 | |
| test_expect_success 'rebase -i --onto master...topic' '
 | |
| 	git reset --hard &&
 | |
| 	git checkout topic &&
 | |
| 	git reset --hard G &&
 | |
| 	set_fake_editor &&
 | |
| 	EXPECT_COUNT=1 git rebase -i --onto master...topic F &&
 | |
| 	git rev-parse HEAD^1 >actual &&
 | |
| 	git rev-parse C^0 >expect &&
 | |
| 	test_cmp expect actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'rebase -i --onto master...' '
 | |
| 	git reset --hard &&
 | |
| 	git checkout topic &&
 | |
| 	git reset --hard G &&
 | |
| 	set_fake_editor &&
 | |
| 	EXPECT_COUNT=1 git rebase -i --onto master... F &&
 | |
| 	git rev-parse HEAD^1 >actual &&
 | |
| 	git rev-parse C^0 >expect &&
 | |
| 	test_cmp expect actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'rebase -i --onto master...side' '
 | |
| 	git reset --hard &&
 | |
| 	git checkout side &&
 | |
| 	git reset --hard K &&
 | |
| 
 | |
| 	test_must_fail git rebase -i --onto master...side J
 | |
| '
 | |
| 
 | |
| test_done
 |