On Fri, Nov 12, 2010 at 09:55:49PM +0100, Martin von Zweigbergk wrote: > With 'git pull --rebase', the user can configure the upstream repository > to fetch from and reference to rebase against if none is specified on > the command line. > > However, if, instead of 'git pull --rebase', the user were to do 'git > fetch' followed by 'git rebase', the upstream branch would need to be > specified on the command line. This patch teaches 'git rebase' to > default to the same configured upstream ref as 'git pull --rebase' > uses. It is something I've meant to take a stake at since ages, cool! Note that the same holds for "merge". > The obvious extension would be to make @{u} the default for 'git merge' > as well. Any opinions? Hell, yes :) > @@ -21,6 +21,10 @@ If <branch> is specified, 'git rebase' will perform an automatic > `git checkout <branch>` before doing anything else. Otherwise > it remains on the current branch. > > +If <upstream> is not specified, the upstream configured in > +branch.<name>.remote and branch.<name>.merge options will be used; see > +linkgit:git-config[1] for details. > + Maybe make explicit that it will abort when no upstream is configured. > @@ -416,9 +409,31 @@ esac > > if test -z "$rebase_root" > then > - # The upstream head must be given. Make sure it is valid. > - upstream_name="$1" > - shift > + case "$#" in > + 0) branch_name=$(git symbolic-ref -q HEAD) && > + upstream_name=$(git for-each-ref \ > + --format='%(upstream)' ${branch_name}) > + if test -z $branch_name > + then > + die "You are not currently on a branch, so I cannot use any > +'branch.<branchname>.merge' in your configuration file. > +Please specify which upstream branch you want to use on the command > +line and try again (e.g. 'git rebase <upstream branch>'). > +See git-rebase(1) for details." > + elif test -z $upstream_name > + then > + die "You asked me to rebase without telling me which branch you > +want to rebase against, and 'branch.${branch_name#refs/heads/}.merge' in > +your configuration file does not tell me, either. Please > +specify which branch you want to use on the command line and > +try again (e.g. 'git rebase <upstream branch>'). > +See git-rebase(1) for details." > + fi > + ;; > + *) upstream_name="$1" > + shift > + ;; > + esac > upstream=`git rev-parse --verify "${upstream_name}^0"` || > die "invalid upstream $upstream_name" > unset root_flag What about simply checking if "rev-parse @{u}" succeeds, in which case we can use upstream_name=@{u} ? If it fails, then we can do the work of finding where the config flaw is (and delegate this to a func). That would help keep the nominal code path short. -- Yann -- 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