Merge branch 'ab/pull-rebase-config'

* ab/pull-rebase-config:
  pull: introduce a pull.rebase option to enable --rebase
This commit is contained in:
Junio C Hamano 2011-12-09 13:37:01 -08:00
commit 1ee740e669
4 changed files with 42 additions and 7 deletions

View File

@ -677,10 +677,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
@ -1590,6 +1592,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

@ -108,7 +108,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

@ -44,6 +44,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 . &&