mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
pull: add pull.ff configuration
Add a `pull.ff` configuration option that is analogous to the `merge.ff` option. This allows us to control the fast-forward behavior for pull-initiated merges only. Signed-off-by: David Aguilar <davvid@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
4224916ae9
commit
b814da891e
|
@ -1877,6 +1877,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.ff::
|
||||||
|
By default, Git does not create an extra merge commit when merging
|
||||||
|
a commit that is a descendant of the current commit. Instead, the
|
||||||
|
tip of the current branch is fast-forwarded. When set to `false`,
|
||||||
|
this variable tells Git to create an extra merge commit in such
|
||||||
|
a case (equivalent to giving the `--no-ff` option from the command
|
||||||
|
line). When set to `only`, only such fast-forward merges are
|
||||||
|
allowed (equivalent to giving the `--ff-only` option from the
|
||||||
|
command line).
|
||||||
|
|
||||||
pull.rebase::
|
pull.rebase::
|
||||||
When true, rebase branches on top of the fetched branch, instead
|
When true, rebase branches on top of the fetched branch, instead
|
||||||
of merging the default branch from the default remote when "git
|
of merging the default branch from the default remote when "git
|
||||||
|
|
15
git-pull.sh
15
git-pull.sh
|
@ -52,6 +52,21 @@ if test -z "$rebase"
|
||||||
then
|
then
|
||||||
rebase=$(bool_or_string_config pull.rebase)
|
rebase=$(bool_or_string_config pull.rebase)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Setup default fast-forward options via `pull.ff`
|
||||||
|
pull_ff=$(git config pull.ff)
|
||||||
|
case "$pull_ff" in
|
||||||
|
false)
|
||||||
|
no_ff=--no-ff
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
only)
|
||||||
|
ff_only=--ff-only
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
dry_run=
|
dry_run=
|
||||||
while :
|
while :
|
||||||
do
|
do
|
||||||
|
|
|
@ -38,6 +38,27 @@ test_expect_success 'merge c1 with c2' '
|
||||||
test -f c2.c
|
test -f c2.c
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'fast-forward pull succeeds with "true" in pull.ff' '
|
||||||
|
git reset --hard c0 &&
|
||||||
|
test_config pull.ff true &&
|
||||||
|
git pull . c1 &&
|
||||||
|
test "$(git rev-parse HEAD)" = "$(git rev-parse c1)"
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'fast-forward pull creates merge with "false" in pull.ff' '
|
||||||
|
git reset --hard c0 &&
|
||||||
|
test_config pull.ff false &&
|
||||||
|
git pull . c1 &&
|
||||||
|
test "$(git rev-parse HEAD^1)" = "$(git rev-parse c0)" &&
|
||||||
|
test "$(git rev-parse HEAD^2)" = "$(git rev-parse c1)"
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'pull prevents non-fast-forward with "only" in pull.ff' '
|
||||||
|
git reset --hard c1 &&
|
||||||
|
test_config pull.ff only &&
|
||||||
|
test_must_fail git pull . c3
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'merge c1 with c2 (ours in pull.twohead)' '
|
test_expect_success 'merge c1 with c2 (ours in pull.twohead)' '
|
||||||
git reset --hard c1 &&
|
git reset --hard c1 &&
|
||||||
git config pull.twohead ours &&
|
git config pull.twohead ours &&
|
||||||
|
|
Loading…
Reference in a new issue