X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=git-pull.sh;h=0bbd5bf7df185acd24302f9e5ce06e4a314d040a;hb=0ded47581aa6097f1a685443d3c2fc0cebaf8c3c;hp=4b78a0cd37ba70236a05f78fb5bed3f763348096;hpb=916e1373fb86db9d7019de4e7e74e39c9474a153;p=git.git diff --git a/git-pull.sh b/git-pull.sh index 4b78a0cd3..0bbd5bf7d 100755 --- a/git-pull.sh +++ b/git-pull.sh @@ -119,15 +119,31 @@ error_on_no_merge_candidates () { } test true = "$rebase" && { - git update-index --ignore-submodules --refresh && - git diff-files --ignore-submodules --quiet && - git diff-index --ignore-submodules --cached --quiet HEAD -- || - die "refusing to pull with rebase: your working tree is not up-to-date" - + if ! git rev-parse -q --verify HEAD >/dev/null + then + # On an unborn branch + if test -f "$GIT_DIR/index" + then + die "updating an unborn branch with changes added to the index" + fi + else + git update-index --ignore-submodules --refresh && + git diff-files --ignore-submodules --quiet && + 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 && - 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