Skip to content

Commit b814da8

Browse files
davvidgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 4224916 commit b814da8

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

Documentation/config.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1877,6 +1877,16 @@ pretty.<name>::
18771877
Note that an alias with the same name as a built-in format
18781878
will be silently ignored.
18791879

1880+
pull.ff::
1881+
By default, Git does not create an extra merge commit when merging
1882+
a commit that is a descendant of the current commit. Instead, the
1883+
tip of the current branch is fast-forwarded. When set to `false`,
1884+
this variable tells Git to create an extra merge commit in such
1885+
a case (equivalent to giving the `--no-ff` option from the command
1886+
line). When set to `only`, only such fast-forward merges are
1887+
allowed (equivalent to giving the `--ff-only` option from the
1888+
command line).
1889+
18801890
pull.rebase::
18811891
When true, rebase branches on top of the fetched branch, instead
18821892
of merging the default branch from the default remote when "git

git-pull.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,21 @@ if test -z "$rebase"
5252
then
5353
rebase=$(bool_or_string_config pull.rebase)
5454
fi
55+
56+
# Setup default fast-forward options via `pull.ff`
57+
pull_ff=$(git config pull.ff)
58+
case "$pull_ff" in
59+
false)
60+
no_ff=--no-ff
61+
break
62+
;;
63+
only)
64+
ff_only=--ff-only
65+
break
66+
;;
67+
esac
68+
69+
5570
dry_run=
5671
while :
5772
do

t/t7601-merge-pull-config.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,27 @@ test_expect_success 'merge c1 with c2' '
3838
test -f c2.c
3939
'
4040

41+
test_expect_success 'fast-forward pull succeeds with "true" in pull.ff' '
42+
git reset --hard c0 &&
43+
test_config pull.ff true &&
44+
git pull . c1 &&
45+
test "$(git rev-parse HEAD)" = "$(git rev-parse c1)"
46+
'
47+
48+
test_expect_success 'fast-forward pull creates merge with "false" in pull.ff' '
49+
git reset --hard c0 &&
50+
test_config pull.ff false &&
51+
git pull . c1 &&
52+
test "$(git rev-parse HEAD^1)" = "$(git rev-parse c0)" &&
53+
test "$(git rev-parse HEAD^2)" = "$(git rev-parse c1)"
54+
'
55+
56+
test_expect_success 'pull prevents non-fast-forward with "only" in pull.ff' '
57+
git reset --hard c1 &&
58+
test_config pull.ff only &&
59+
test_must_fail git pull . c3
60+
'
61+
4162
test_expect_success 'merge c1 with c2 (ours in pull.twohead)' '
4263
git reset --hard c1 &&
4364
git config pull.twohead ours &&

0 commit comments

Comments
 (0)