File tree Expand file tree Collapse file tree 3 files changed +47
-1
lines changed Expand file tree Collapse file tree 3 files changed +47
-1
lines changed Original file line number Diff line number Diff line change @@ -1889,6 +1889,16 @@ pretty.<name>::
1889
1889
Note that an alias with the same name as a built-in format
1890
1890
will be silently ignored.
1891
1891
1892
+ pull.ff::
1893
+ By default, Git does not create an extra merge commit when merging
1894
+ a commit that is a descendant of the current commit. Instead, the
1895
+ tip of the current branch is fast-forwarded. When set to `false`,
1896
+ this variable tells Git to create an extra merge commit in such
1897
+ a case (equivalent to giving the `--no-ff` option from the command
1898
+ line). When set to `only`, only such fast-forward merges are
1899
+ allowed (equivalent to giving the `--ff-only` option from the
1900
+ command line).
1901
+
1892
1902
pull.rebase::
1893
1903
When true, rebase branches on top of the fetched branch, instead
1894
1904
of merging the default branch from the default remote when "git
Original file line number Diff line number Diff line change 4
4
#
5
5
# Fetch one or more remote refs and merge it/them into the current HEAD.
6
6
7
- USAGE=' [-n | --no-stat] [--[no-]commit] [--[no-]squash] [--[no-]ff] [--[no-]rebase|--rebase=preserve] [-s strategy]... [<fetch-options>] <repo> <head>...'
7
+ USAGE=' [-n | --no-stat] [--[no-]commit] [--[no-]squash] [--[no-]ff|--ff-only ] [--[no-]rebase|--rebase=preserve] [-s strategy]... [<fetch-options>] <repo> <head>...'
8
8
LONG_USAGE=' Fetch one or more remote refs and integrate it/them with the current HEAD.'
9
9
SUBDIRECTORY_OK=Yes
10
10
OPTIONS_SPEC=
@@ -52,6 +52,21 @@ if test -z "$rebase"
52
52
then
53
53
rebase=$( bool_or_string_config pull.rebase)
54
54
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
+
55
70
dry_run=
56
71
while :
57
72
do
Original file line number Diff line number Diff line change @@ -38,6 +38,27 @@ test_expect_success 'merge c1 with c2' '
38
38
test -f c2.c
39
39
'
40
40
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
+
41
62
test_expect_success ' merge c1 with c2 (ours in pull.twohead)' '
42
63
git reset --hard c1 &&
43
64
git config pull.twohead ours &&
You can’t perform that action at this time.
0 commit comments