Thread (14 messages) 14 messages, 5 authors, 2016-06-15

Re: [PATCH] rebase: use reflog to find common base with upstream

flat view

From: Martin von Zweigbergk <hidden>
Date: 2016-06-15 22:59:03

On Wed, Oct 16, 2013 at 11:53 AM, John Keeping [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Commit 15a147e (rebase: use @{upstream} if no upstream specified,
2011-02-09) says:

        Make it default to 'git rebase @{upstream}'. That is also what
        'git pull [--rebase]' defaults to, so it only makes sense that
        'git rebase' defaults to the same thing.

but that isn't actually the case.  Since commit d44e712 (pull: support
rebased upstream + fetch + pull --rebase, 2009-07-19), pull has actually
chosen the most recent reflog entry which is an ancestor of the current
branch if it can find one.

Change rebase so that it uses the same logic.

Signed-off-by: John Keeping <redacted>
---
 git-rebase.sh     | 8 ++++++++
 t/t3400-rebase.sh | 6 ++++--
 2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/git-rebase.sh b/git-rebase.sh
index 226752f..fd36cf7 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -437,6 +437,14 @@ then
                        error_on_missing_default_upstream "rebase" "rebase" \
                                "against" "git rebase <branch>"
                fi
+               for reflog in $(git rev-list -g "$upstream_name" 2>/dev/null)
+               do
+                       if test "$reflog" = "$(git merge-base "$reflog" HEAD)"
+                       then
+                               upstream_name=$reflog
+                               break
+                       fi
+               done
                ;;
        *)      upstream_name="$1"
                shift
A little later, "onto_name" gets assigned like so:

  onto_name=${onto-"$upstream_name"}

So if upstream_name was set above, then onto would get the same value,
which is not what we want, right? It seems like this block of code
should come a bit later.

I also think it not be run only when rebase was run without a given
upstream. If the configured upstream is "origin/master", it seems like
it would be surprising to get different behavior from "git rebase" and
"git rebase origin/master".
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help