On Thu, Aug 12, 2010 at 3:34 PM, Santi Béjar <santi@xxxxxxxxxxx> wrote: > On Thu, Aug 12, 2010 at 7:56 AM, Elijah Newren <newren@xxxxxxxxx> wrote: [...] >> >> Signed-off-by: Elijah Newren <newren@xxxxxxxxx> >> --- >> 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 @@ then >> exit >> 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html