summaryrefslogtreecommitdiff
path: root/git-pull.sh
diff options
context:
space:
mode:
authorSanti Béjar <santi@agolina.net>2009-07-19 09:45:16 +0200
committerJunio C Hamano <gitster@pobox.com>2009-07-19 10:29:38 -0700
commitd44e71261f91d3cc81293e0976bb40daa8abb583 (patch)
treeafea1b178e05f1bd1e2fb38d62b8691e16261255 /git-pull.sh
parenta418441b4ea2ab69a17636c3020a29394d4c6562 (diff)
downloadgit-d44e71261f91d3cc81293e0976bb40daa8abb583.tar.gz
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>
Diffstat (limited to 'git-pull.sh')
-rwxr-xr-xgit-pull.sh14
1 files changed, 11 insertions, 3 deletions
diff --git a/git-pull.sh b/git-pull.sh
index 4b78a0cd37..0f24182974 100755
--- a/git-pull.sh
+++ b/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