Re: [PATCHv4 2/2] pull --rebase: Avoid spurious conflicts and reapplying unnecessary patches
From: Santi Béjar <hidden>
Date: 2016-06-15 22:49:18
On Thu, Aug 12, 2010 at 3:34 PM, Santi Béjar [off-list ref] wrote:
On Thu, Aug 12, 2010 at 7:56 AM, Elijah Newren [off-list ref] wrote:
[...]
quoted
Signed-off-by: Elijah Newren <redacted> --- git-pull.sh | 34 ++++++++++++++++++++++------------ t/t5520-pull.sh | 4 ++-- 2 files changed, 24 insertions(+), 14 deletions(-)diff --git a/git-pull.sh b/git-pull.sh index a09a44e..54da07b 100755 --- a/git-pull.sh +++ b/git-pull.sh@@ -206,18 +206,6 @@ 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" fi - oldremoteref= && - . git-parse-remote && - 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 $progress $dry_run --update-head-ok "$@" || exit 1@@ -273,6 +261,28 @@ thenexit fi +if test true = "$rebase" +then + oldremoteref= && + . git-parse-remote && + 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 + + o=$(git show-branch --merge-base $curr_branch $merge_head $oldremoteref) + if test "$oldremoteref" = "$o" + then + unset oldremoteref + fi +fi +You've moved all the lines after the call to "git fetch". It changes the behavior when the reflog is not enabled, as the old value of remoteref is lost.
Something like this? Fix the non-rebased upstream case by only setting $old_remote_ref with commits not ancestors of $remoteref or $merge_head. This should have no affect on the rebased upstream case.
diff --git c/git-pull.sh w/git-pull.sh
index a09a44e..c1617d5 100755
--- c/git-pull.sh
+++ w/git-pull.sh@@ -214,7 +214,10 @@ test true = "$rebase" && { do if test "$reflog" = "$(git merge-base $reflog $curr_branch)" then - oldremoteref="$reflog" + if test "$reflog" != $(git merge-base $reflog
$remoteref)
+ then
+ oldremoteref="$reflog"
+ fi
break
fi
done@@ -273,6 +276,14 @@ then exit fi +if test true = "$rebase" +then + if test "$oldremoteref" = $(git merge-base $oldremoteref $merge_head) + then + unset oldremoteref + fi +fi + merge_name=$(git fmt-merge-msg $log_arg <"$GIT_DIR/FETCH_HEAD") || exit case "$rebase" in true)
(also attached because of whitespace damage) HTH, Santi