pull: introduce a pull.rebase option to enable --rebase

Currently we either need to set branch.<name>.rebase for existing
branches if we'd like "git pull" to mean "git pull --rebase", or have
the forethought of setting "branch.autosetuprebase" before we create
the branch.

Introduce a "pull.rebase" option to globally configure "git pull" to
mean "git pull --rebase" for any branch.

This option will be considered at a lower priority than
branch.<name>.rebase, i.e. we could set pull.rebase=true and
branch.<name>.rebase=false and the latter configuration option would
win.

Reviewed-by: Sverre Rabbelier <srabbelier@gmail.com>
Reviewed-by: Fernando Vezzosi <buccia@repnz.net>
Reviewed-by: Eric Herman <eric@freesa.org>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Liked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2011-11-06 10:50:10 +01:00 committed by Junio C Hamano
parent f696543dad
commit 6b37dff17f
4 changed files with 42 additions and 7 deletions

View file

@ -668,10 +668,12 @@ branch.<name>.mergeoptions::
branch.<name>.rebase:: branch.<name>.rebase::
When true, rebase the branch <name> on top of the fetched branch, When true, rebase the branch <name> on top of the fetched branch,
instead of merging the default branch from the default remote when instead of merging the default branch from the default remote when
"git pull" is run. "git pull" is run. See "pull.rebase" for doing this in a non
*NOTE*: this is a possibly dangerous operation; do *not* use branch-specific manner.
it unless you understand the implications (see linkgit:git-rebase[1] +
for details). *NOTE*: this is a possibly dangerous operation; do *not* use
it unless you understand the implications (see linkgit:git-rebase[1]
for details).
browser.<tool>.cmd:: browser.<tool>.cmd::
Specify the command to invoke the specified browser. The Specify the command to invoke the specified browser. The
@ -1548,6 +1550,16 @@ pretty.<name>::
Note that an alias with the same name as a built-in format Note that an alias with the same name as a built-in format
will be silently ignored. will be silently ignored.
pull.rebase::
When true, rebase branches on top of the fetched branch, instead
of merging the default branch from the default remote when "git
pull" is run. See "branch.<name>.rebase" for setting this on a
per-branch basis.
+
*NOTE*: this is a possibly dangerous operation; do *not* use
it unless you understand the implications (see linkgit:git-rebase[1]
for details).
pull.octopus:: pull.octopus::
The default merge strategy to use when pulling multiple branches The default merge strategy to use when pulling multiple branches
at once. at once.

View file

@ -107,7 +107,7 @@ include::merge-options.txt[]
fetched, the rebase uses that information to avoid rebasing fetched, the rebase uses that information to avoid rebasing
non-local changes. non-local changes.
+ +
See `branch.<name>.rebase` and `branch.autosetuprebase` in See `pull.rebase`, `branch.<name>.rebase` and `branch.autosetuprebase` in
linkgit:git-config[1] if you want to make `git pull` always use linkgit:git-config[1] if you want to make `git pull` always use
`{litdd}rebase` instead of merging. `{litdd}rebase` instead of merging.
+ +

View file

@ -43,6 +43,10 @@ merge_args=
curr_branch=$(git symbolic-ref -q HEAD) curr_branch=$(git symbolic-ref -q HEAD)
curr_branch_short="${curr_branch#refs/heads/}" curr_branch_short="${curr_branch#refs/heads/}"
rebase=$(git config --bool branch.$curr_branch_short.rebase) rebase=$(git config --bool branch.$curr_branch_short.rebase)
if test -z "$rebase"
then
rebase=$(git config --bool pull.rebase)
fi
dry_run= dry_run=
while : while :
do do

View file

@ -94,16 +94,35 @@ test_expect_success '--rebase' '
test $(git rev-parse HEAD^) = $(git rev-parse copy) && test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
test new = $(git show HEAD:file2) test new = $(git show HEAD:file2)
' '
test_expect_success 'pull.rebase' '
git reset --hard before-rebase &&
git config --bool pull.rebase true &&
test_when_finished "git config --unset pull.rebase" &&
git pull . copy &&
test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
test new = $(git show HEAD:file2)
'
test_expect_success 'branch.to-rebase.rebase' ' test_expect_success 'branch.to-rebase.rebase' '
git reset --hard before-rebase && git reset --hard before-rebase &&
git config branch.to-rebase.rebase 1 && git config --bool branch.to-rebase.rebase true &&
test_when_finished "git config --unset branch.to-rebase.rebase" &&
git pull . copy && git pull . copy &&
git config branch.to-rebase.rebase 0 &&
test $(git rev-parse HEAD^) = $(git rev-parse copy) && test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
test new = $(git show HEAD:file2) test new = $(git show HEAD:file2)
' '
test_expect_success 'branch.to-rebase.rebase should override pull.rebase' '
git reset --hard before-rebase &&
git config --bool pull.rebase true &&
test_when_finished "git config --unset pull.rebase" &&
git config --bool branch.to-rebase.rebase false &&
test_when_finished "git config --unset branch.to-rebase.rebase" &&
git pull . copy &&
test $(git rev-parse HEAD^) != $(git rev-parse copy) &&
test new = $(git show HEAD:file2)
'
test_expect_success '--rebase with rebased upstream' ' test_expect_success '--rebase with rebased upstream' '
git remote add -f me . && git remote add -f me . &&