pull: support rebased upstream + fetch + pull --rebase
You cannot do a "git pull --rebase" with a rebased upstream, if you have already run "git fetch". Try to behave as if the "git fetch" was not run. In other words, find the fork point of the current branch, where the tip of upstream branch used to be, and use it as the upstream parameter of "git rebase". This patch computes the fork point by walking the reflog to find the first commit which is an ancestor of the current branch. Maybe there are smarter ways to compute it, but this is a straight forward implementation. Signed-off-by: Santi Béjar <santi@agolina.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									a418441b4e
								
							
						
					
					
						commit
						d44e71261f
					
				
							
								
								
									
										14
									
								
								git-pull.sh
								
								
								
								
							
							
						
						
									
										14
									
								
								git-pull.sh
								
								
								
								
							|  | @ -124,10 +124,18 @@ test true = "$rebase" && { | |||
| 	git diff-index --ignore-submodules --cached --quiet HEAD -- || | ||||
| 	die "refusing to pull with rebase: your working tree is not up-to-date" | ||||
|  | ||||
| 	oldremoteref= && | ||||
| 	. git-parse-remote && | ||||
| 	reflist="$(get_remote_merge_branch "$@" 2>/dev/null)" && | ||||
| 	oldremoteref="$(git rev-parse -q --verify \ | ||||
| 		"$reflist")" | ||||
| 	remoteref="$(get_remote_merge_branch "$@" 2>/dev/null)" && | ||||
| 	oldremoteref="$(git rev-parse -q --verify "$remoteref")" && | ||||
| 	for reflog in $(git rev-list -g $remoteref 2>/dev/null) | ||||
| 	do | ||||
| 		if test "$reflog" = "$(git merge-base $reflog $curr_branch)" | ||||
| 		then | ||||
| 			oldremoteref="$reflog" | ||||
| 			break | ||||
| 		fi | ||||
| 	done | ||||
| } | ||||
| orig_head=$(git rev-parse -q --verify HEAD) | ||||
| git fetch $verbosity --update-head-ok "$@" || exit 1 | ||||
|  |  | |||
|  | @ -117,15 +117,14 @@ test_expect_success '--rebase with rebased default upstream' ' | |||
|  | ||||
| ' | ||||
|  | ||||
| test_expect_failure 'rebased upstream + fetch + pull --rebase' ' | ||||
| test_expect_success 'rebased upstream + fetch + pull --rebase' ' | ||||
|  | ||||
| 	git update-ref refs/remotes/me/copy copy-orig && | ||||
| 	git reset --hard to-rebase-orig && | ||||
| 	git checkout --track -b to-rebase3 me/copy && | ||||
| 	git reset --hard to-rebase-orig && | ||||
| 	git fetch && | ||||
| 	test_must_fail git pull --rebase && | ||||
| 	git rebase --abort && | ||||
| 	git pull --rebase && | ||||
| 	test "conflicting modification" = "$(cat file)" && | ||||
| 	test file = "$(cat file2)" | ||||
|  | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Santi Béjar
						Santi Béjar