]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pull: abort by default when fast-forwarding is not possible
authorElijah Newren <newren@gmail.com>
Thu, 22 Jul 2021 05:04:48 +0000 (05:04 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 22 Jul 2021 18:54:29 +0000 (11:54 -0700)
We have for some time shown a long warning when the user does not
specify how to reconcile divergent branches with git pull.  Make it an
error now.

Initial-patch-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 files changed:
Documentation/git-pull.txt
builtin/pull.c
t/t4013-diff-various.sh
t/t5520-pull.sh
t/t5521-pull-options.sh
t/t5524-pull-msg.sh
t/t5553-set-upstream.sh
t/t5604-clone-reference.sh
t/t6402-merge-rename.sh
t/t6409-merge-subtree.sh
t/t6417-merge-ours-theirs.sh
t/t7601-merge-pull-config.sh
t/t7603-merge-reduce-heads.sh

index 5c3fb67c01483957359df5cbadd0e839809c3c85..cad3f6bfcee0d5dc2d65baebd0c82c83b8096685 100644 (file)
@@ -15,14 +15,18 @@ SYNOPSIS
 DESCRIPTION
 -----------
 
-Incorporates changes from a remote repository into the current
-branch.  In its default mode, `git pull` is shorthand for
-`git fetch` followed by `git merge FETCH_HEAD`.
-
-More precisely, 'git pull' runs 'git fetch' with the given
-parameters and calls 'git merge' to merge the retrieved branch
-heads into the current branch.
-With `--rebase`, it runs 'git rebase' instead of 'git merge'.
+Incorporates changes from a remote repository into the current branch.
+If the current branch is behind the remote, then by default it will
+fast-forward the current branch to match the remote.  If the current
+branch and the remote have diverged, the user needs to specify how to
+reconcile the divergent branches with `--no-ff`, `--ff`, or `--rebase`
+(or the corresponding configuration options in `pull.ff` or
+`pull.rebase`).
+
+More precisely, `git pull` runs `git fetch` with the given parameters
+and then depending on configuration options or command line flags,
+will call either `git merge` or `git rebase` to reconcile diverging
+branches.
 
 <repository> should be the name of a remote repository as
 passed to linkgit:git-fetch[1].  <refspec> can name an
index 9bf032552911b00e328a52deca9c027303f1cadd..4514a1478eac0f51af35ec2876df606346c36db3 100644 (file)
@@ -927,9 +927,9 @@ static int get_can_ff(struct object_id *orig_head, struct object_id *orig_merge_
 
 static void show_advice_pull_non_ff(void)
 {
-       advise(_("Pulling without specifying how to reconcile divergent branches is\n"
-                "discouraged. You can squelch this message by running one of the following\n"
-                "commands sometime before your next pull:\n"
+       advise(_("You have divergent branches and need to specify how to reconcile them.\n"
+                "You can do so by running one of the following commands sometime before\n"
+                "your next pull:\n"
                 "\n"
                 "  git config pull.rebase false  # merge (the default strategy)\n"
                 "  git config pull.rebase true   # rebase\n"
@@ -1067,8 +1067,10 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
                opt_rebase = REBASE_FALSE;
        }
        /* If no action specified and we can't fast forward, then warn. */
-       if (!opt_ff && rebase_unspecified && !can_ff)
+       if (!opt_ff && rebase_unspecified && !can_ff) {
                show_advice_pull_non_ff();
+               die(_("Need to specify how to reconcile divergent branches."));
+       }
 
        if (opt_rebase) {
                int ret = 0;
index 7fadc985cccd0558be4e4114434f143605e710a4..eb989f7f1912edfc967a5ddd8064d0bd1d5619a1 100755 (executable)
@@ -65,7 +65,7 @@ test_expect_success setup '
        export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
 
        git checkout master &&
-       git pull -s ours . side &&
+       git pull -s ours --no-rebase . side &&
 
        GIT_AUTHOR_DATE="2006-06-26 00:05:00 +0000" &&
        GIT_COMMITTER_DATE="2006-06-26 00:05:00 +0000" &&
index e2c0c510222ddefb8dc28ee44b931fbdad7713dd..672001a18bd10bc2b7a0c4eaec01ec9e353788db 100755 (executable)
@@ -136,12 +136,12 @@ test_expect_success 'the default remote . should not break explicit pull' '
        git reset --hard HEAD^ &&
        echo file >expect &&
        test_cmp expect file &&
-       git pull . second &&
+       git pull --no-rebase . second &&
        echo modified >expect &&
        test_cmp expect file &&
        git reflog -1 >reflog.actual &&
        sed "s/^[0-9a-f][0-9a-f]*/OBJID/" reflog.actual >reflog.fuzzy &&
-       echo "OBJID HEAD@{0}: pull . second: Fast-forward" >reflog.expected &&
+       echo "OBJID HEAD@{0}: pull --no-rebase . second: Fast-forward" >reflog.expected &&
        test_cmp reflog.expected reflog.fuzzy
 '
 
@@ -226,7 +226,7 @@ test_expect_success 'fail if the index has unresolved entries' '
        test_commit modified2 file &&
        git ls-files -u >unmerged &&
        test_must_be_empty unmerged &&
-       test_must_fail git pull . second &&
+       test_must_fail git pull --no-rebase . second &&
        git ls-files -u >unmerged &&
        test_file_not_empty unmerged &&
        cp file expected &&
@@ -409,37 +409,37 @@ test_expect_success 'pull --rebase --no-autostash & rebase.autostash unset' '
 
 test_expect_success 'pull succeeds with dirty working directory and merge.autostash set' '
        test_config merge.autostash true &&
-       test_pull_autostash 2
+       test_pull_autostash 2 --no-rebase
 '
 
 test_expect_success 'pull --autostash & merge.autostash=true' '
        test_config merge.autostash true &&
-       test_pull_autostash 2 --autostash
+       test_pull_autostash 2 --autostash --no-rebase
 '
 
 test_expect_success 'pull --autostash & merge.autostash=false' '
        test_config merge.autostash false &&
-       test_pull_autostash 2 --autostash
+       test_pull_autostash 2 --autostash --no-rebase
 '
 
 test_expect_success 'pull --autostash & merge.autostash unset' '
        test_unconfig merge.autostash &&
-       test_pull_autostash 2 --autostash
+       test_pull_autostash 2 --autostash --no-rebase
 '
 
 test_expect_success 'pull --no-autostash & merge.autostash=true' '
        test_config merge.autostash true &&
-       test_pull_autostash_fail --no-autostash
+       test_pull_autostash_fail --no-autostash --no-rebase
 '
 
 test_expect_success 'pull --no-autostash & merge.autostash=false' '
        test_config merge.autostash false &&
-       test_pull_autostash_fail --no-autostash
+       test_pull_autostash_fail --no-autostash --no-rebase
 '
 
 test_expect_success 'pull --no-autostash & merge.autostash unset' '
        test_unconfig merge.autostash &&
-       test_pull_autostash_fail --no-autostash
+       test_pull_autostash_fail --no-autostash --no-rebase
 '
 
 test_expect_success 'pull.rebase' '
index 63a688bdbf51e6096ab387293d13c81eaeb72f74..7601c919fdc0c1fd991632adb61604b8fd16df24 100755 (executable)
@@ -113,7 +113,7 @@ test_expect_success 'git pull --force' '
        git pull two &&
        test_commit A &&
        git branch -f origin &&
-       git pull --all --force
+       git pull --no-rebase --all --force
        )
 '
 
@@ -179,7 +179,7 @@ test_expect_success 'git pull --allow-unrelated-histories' '
        (
                cd dst &&
                test_must_fail git pull ../src side &&
-               git pull --allow-unrelated-histories ../src side
+               git pull --no-rebase --allow-unrelated-histories ../src side
        )
 '
 
index c278adaa5a2556327a820cdeb98943b58d1e429f..b2be3605f5a3f0649879a31803b5fc7cfe40d8a1 100755 (executable)
@@ -28,7 +28,7 @@ test_expect_success setup '
 test_expect_success pull '
 (
        cd cloned &&
-       git pull --log &&
+       git pull --no-rebase --log &&
        git log -2 &&
        git cat-file commit HEAD >result &&
        grep Dollar result
@@ -41,7 +41,7 @@ test_expect_success '--log=1 limits shortlog length' '
        git reset --hard HEAD^ &&
        test "$(cat afile)" = original &&
        test "$(cat bfile)" = added &&
-       git pull --log=1 &&
+       git pull --no-rebase --log=1 &&
        git log -3 &&
        git cat-file commit HEAD >result &&
        grep Dollar result &&
index b1d614ce18c2869467fe1812fed5ed62597328d4..9c12c0f8c321def9e39d0887d463b5d227d3157d 100755 (executable)
@@ -108,27 +108,27 @@ test_expect_success 'setup commit on main and other pull' '
 
 test_expect_success 'pull --set-upstream upstream main sets branch main but not other' '
        clear_config main other &&
-       git pull --set-upstream upstream main &&
+       git pull --no-rebase --set-upstream upstream main &&
        check_config main upstream refs/heads/main &&
        check_config_missing other
 '
 
 test_expect_success 'pull --set-upstream main:other2 does not set the branch other2' '
        clear_config other2 &&
-       git pull --set-upstream upstream main:other2 &&
+       git pull --no-rebase --set-upstream upstream main:other2 &&
        check_config_missing other2
 '
 
 test_expect_success 'pull --set-upstream upstream other sets branch main' '
        clear_config main other &&
-       git pull --set-upstream upstream other &&
+       git pull --no-rebase --set-upstream upstream other &&
        check_config main upstream refs/heads/other &&
        check_config_missing other
 '
 
 test_expect_success 'pull --set-upstream upstream tag does not set the tag' '
        clear_config three &&
-       git pull --tags --set-upstream upstream three &&
+       git pull --no-rebase --tags --set-upstream upstream three &&
        check_config_missing three
 '
 
@@ -144,16 +144,16 @@ test_expect_success 'pull --set-upstream http://nosuchdomain.example.com fails w
 
 test_expect_success 'pull --set-upstream upstream HEAD sets branch HEAD' '
        clear_config main other &&
-       git pull --set-upstream upstream HEAD &&
+       git pull --no-rebase --set-upstream upstream HEAD &&
        check_config main upstream HEAD &&
        git checkout other &&
-       git pull --set-upstream upstream HEAD &&
+       git pull --no-rebase --set-upstream upstream HEAD &&
        check_config other upstream HEAD
 '
 
 test_expect_success 'pull --set-upstream upstream with more than one branch does nothing' '
        clear_config main three &&
-       git pull --set-upstream upstream main three &&
+       git pull --no-rebase --set-upstream upstream main three &&
        check_config_missing main &&
        check_config_missing three
 '
index e845d621f618ba83962842b766c076a788877936..24340e6d56e18d6a2a9082654c95ef58ac7ed196 100755 (executable)
@@ -87,7 +87,7 @@ test_expect_success 'updating origin' '
 '
 
 test_expect_success 'pulling changes from origin' '
-       git -C C pull origin
+       git -C C pull --no-rebase origin
 '
 
 # the 2 local objects are commit and tree from the merge
@@ -96,7 +96,7 @@ test_expect_success 'that alternate to origin gets used' '
 '
 
 test_expect_success 'pulling changes from origin' '
-       git -C D pull origin
+       git -C D pull --no-rebase origin
 '
 
 # the 5 local objects are expected; file3 blob, commit in A to add it
index 425dad97d54a6abf3a33fd5bab3dac5fbc112c5b..02a842697b8e1d6ff30b3f41efb2d638d745df91 100755 (executable)
@@ -103,7 +103,7 @@ test_expect_success 'setup' '
 test_expect_success 'pull renaming branch into unrenaming one' \
 '
        git show-branch &&
-       test_expect_code 1 git pull . white &&
+       test_expect_code 1 git pull --no-rebase . white &&
        git ls-files -s &&
        git ls-files -u B >b.stages &&
        test_line_count = 3 b.stages &&
@@ -121,7 +121,7 @@ test_expect_success 'pull renaming branch into another renaming one' \
        rm -f B &&
        git reset --hard &&
        git checkout red &&
-       test_expect_code 1 git pull . white &&
+       test_expect_code 1 git pull --no-rebase . white &&
        git ls-files -u B >b.stages &&
        test_line_count = 3 b.stages &&
        git ls-files -s N >n.stages &&
@@ -137,7 +137,7 @@ test_expect_success 'pull unrenaming branch into renaming one' \
 '
        git reset --hard &&
        git show-branch &&
-       test_expect_code 1 git pull . main &&
+       test_expect_code 1 git pull --no-rebase . main &&
        git ls-files -u B >b.stages &&
        test_line_count = 3 b.stages &&
        git ls-files -s N >n.stages &&
@@ -153,7 +153,7 @@ test_expect_success 'pull conflicting renames' \
 '
        git reset --hard &&
        git show-branch &&
-       test_expect_code 1 git pull . blue &&
+       test_expect_code 1 git pull --no-rebase . blue &&
        git ls-files -u A >a.stages &&
        test_line_count = 1 a.stages &&
        git ls-files -u B >b.stages &&
@@ -173,7 +173,7 @@ test_expect_success 'interference with untracked working tree file' '
        git reset --hard &&
        git show-branch &&
        echo >A this file should not matter &&
-       test_expect_code 1 git pull . white &&
+       test_expect_code 1 git pull --no-rebase . white &&
        test_path_is_file A
 '
 
@@ -183,7 +183,7 @@ test_expect_success 'interference with untracked working tree file' '
        git show-branch &&
        rm -f A &&
        echo >A this file should not matter &&
-       test_expect_code 1 git pull . red &&
+       test_expect_code 1 git pull --no-rebase . red &&
        test_path_is_file A
 '
 
@@ -193,7 +193,7 @@ test_expect_success 'interference with untracked working tree file' '
        git checkout -f main &&
        git tag -f anchor &&
        git show-branch &&
-       git pull . yellow &&
+       git pull --no-rebase . yellow &&
        test_path_is_missing M &&
        git reset --hard anchor
 '
@@ -220,7 +220,7 @@ test_expect_success 'updated working tree file should prevent the merge' '
        echo >>M one line addition &&
        cat M >M.saved &&
        git update-index M &&
-       test_expect_code 128 git pull . yellow &&
+       test_expect_code 128 git pull --no-rebase . yellow &&
        test_cmp M M.saved &&
        rm -f M.saved
 '
@@ -232,7 +232,7 @@ test_expect_success 'interference with untracked working tree file' '
        git tag -f anchor &&
        git show-branch &&
        echo >M this file should not matter &&
-       git pull . main &&
+       git pull --no-rebase . main &&
        test_path_is_file M &&
        ! {
                git ls-files -s |
index d406b2343cb3260a02e9941148dd2a83ec3abeac..ba7890ec521f510cf9d389331bf12d7cf11be4fb 100755 (executable)
@@ -100,7 +100,7 @@ test_expect_success 'merge update' '
        git checkout -b topic_2 &&
        git commit -m "update git-gui" &&
        cd ../git &&
-       git pull -s subtree gui topic_2 &&
+       git pull --no-rebase -s subtree gui topic_2 &&
        git ls-files -s >actual &&
        (
                echo "100644 $o3 0      git-gui/git-gui.sh" &&
@@ -129,7 +129,7 @@ test_expect_success 'initial ambiguous subtree' '
 test_expect_success 'merge using explicit' '
        cd ../git &&
        git reset --hard topic_2 &&
-       git pull -Xsubtree=git-gui gui topic_2 &&
+       git pull --no-rebase -Xsubtree=git-gui gui topic_2 &&
        git ls-files -s >actual &&
        (
                echo "100644 $o3 0      git-gui/git-gui.sh" &&
@@ -142,7 +142,7 @@ test_expect_success 'merge using explicit' '
 test_expect_success 'merge2 using explicit' '
        cd ../git &&
        git reset --hard topic_2 &&
-       git pull -Xsubtree=git-gui2 gui topic_2 &&
+       git pull --no-rebase -Xsubtree=git-gui2 gui topic_2 &&
        git ls-files -s >actual &&
        (
                echo "100644 $o1 0      git-gui/git-gui.sh" &&
index ac9aee9a6625530f385b038f59776073044e691f..ec065d6a6581dc368fa9f03edfa9cfdcb0483eb2 100755 (executable)
@@ -69,11 +69,11 @@ test_expect_success 'binary file with -Xours/-Xtheirs' '
 '
 
 test_expect_success 'pull passes -X to underlying merge' '
-       git reset --hard main && git pull -s recursive -Xours . side &&
-       git reset --hard main && git pull -s recursive -X ours . side &&
-       git reset --hard main && git pull -s recursive -Xtheirs . side &&
-       git reset --hard main && git pull -s recursive -X theirs . side &&
-       git reset --hard main && test_must_fail git pull -s recursive -X bork . side
+       git reset --hard main && git pull --no-rebase -s recursive -Xours . side &&
+       git reset --hard main && git pull --no-rebase -s recursive -X ours . side &&
+       git reset --hard main && git pull --no-rebase -s recursive -Xtheirs . side &&
+       git reset --hard main && git pull --no-rebase -s recursive -X theirs . side &&
+       git reset --hard main && test_must_fail git pull --no-rebase -s recursive -X bork . side
 '
 
 test_expect_success SYMLINKS 'symlink with -Xours/-Xtheirs' '
index 0c0dfecd2a3b21c5bce7953c77b1e02b3ce7cdb6..742ed3981c7644fa95db890d6e88d40f2e06c1ff 100755 (executable)
@@ -27,120 +27,120 @@ test_expect_success 'setup' '
        git tag c3
 '
 
-test_expect_success 'pull.rebase not set' '
+test_expect_success 'pull.rebase not set, ff possible' '
        git reset --hard c0 &&
        git pull . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and pull.ff=true' '
        git reset --hard c0 &&
        test_config pull.ff true &&
        git pull . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and pull.ff=false' '
        git reset --hard c0 &&
        test_config pull.ff false &&
        git pull . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and pull.ff=only' '
        git reset --hard c0 &&
        test_config pull.ff only &&
        git pull . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and --rebase given' '
        git reset --hard c0 &&
        git pull --rebase . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and --no-rebase given' '
        git reset --hard c0 &&
        git pull --no-rebase . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and --ff given' '
        git reset --hard c0 &&
        git pull --ff . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and --no-ff given' '
        git reset --hard c0 &&
        git pull --no-ff . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and --ff-only given' '
        git reset --hard c0 &&
        git pull --ff-only . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set (not-fast-forward)' '
        git reset --hard c2 &&
-       git -c color.advice=always pull . c1 2>err &&
+       test_must_fail git -c color.advice=always pull . c1 2>err &&
        test_decode_color <err >decoded &&
        test_i18ngrep "<YELLOW>hint: " decoded &&
-       test_i18ngrep "Pulling without specifying how to reconcile" decoded
+       test_i18ngrep "You have divergent branches" decoded
 '
 
 test_expect_success 'pull.rebase not set and pull.ff=true (not-fast-forward)' '
        git reset --hard c2 &&
        test_config pull.ff true &&
        git pull . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and pull.ff=false (not-fast-forward)' '
        git reset --hard c2 &&
        test_config pull.ff false &&
        git pull . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and pull.ff=only (not-fast-forward)' '
        git reset --hard c2 &&
        test_config pull.ff only &&
        test_must_fail git pull . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and --rebase given (not-fast-forward)' '
        git reset --hard c2 &&
        git pull --rebase . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and --no-rebase given (not-fast-forward)' '
        git reset --hard c2 &&
        git pull --no-rebase . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and --ff given (not-fast-forward)' '
        git reset --hard c2 &&
        git pull --ff . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and --no-ff given (not-fast-forward)' '
        git reset --hard c2 &&
        git pull --no-ff . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_expect_success 'pull.rebase not set and --ff-only given (not-fast-forward)' '
        git reset --hard c2 &&
        test_must_fail git pull --ff-only . c1 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err
+       test_i18ngrep ! "You have divergent branches" err
 '
 
 test_does_rebase () {
@@ -325,16 +325,16 @@ test_expect_success 'pull.rebase=false and --ff, ff not possible' '
 
 # End of groupings for conflicting merge vs. rebase flags/options
 
-test_expect_failure 'Multiple heads warns about inability to fast forward' '
+test_expect_success 'Multiple heads warns about inability to fast forward' '
        git reset --hard c1 &&
        test_must_fail git pull . c2 c3 2>err &&
-       test_i18ngrep "Pulling without specifying how to reconcile" err
+       test_i18ngrep "You have divergent branches" err
 '
 
 test_expect_failure 'Multiple can never be fast forwarded' '
        git reset --hard c0 &&
        test_must_fail git -c pull.ff=only pull . c1 c2 c3 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err &&
+       test_i18ngrep ! "You have divergent branches" err &&
        # In addition to calling out "cannot fast-forward", we very much
        # want the "multiple branches" piece to be called out to users.
        test_i18ngrep "Cannot fast-forward to multiple branches" err
@@ -343,7 +343,7 @@ test_expect_failure 'Multiple can never be fast forwarded' '
 test_expect_success 'Cannot rebase with multiple heads' '
        git reset --hard c0 &&
        test_must_fail git -c pull.rebase=true pull . c1 c2 c3 2>err &&
-       test_i18ngrep ! "Pulling without specifying how to reconcile" err &&
+       test_i18ngrep ! "You have divergent branches" err &&
        test_i18ngrep "Cannot rebase onto multiple branches." err
 '
 
index 98948955ae507ef007dc541f7e981d06bf7b49ab..27cd94ad6f7770f93c84bad8a0a966e6d026ea78 100755 (executable)
@@ -68,7 +68,7 @@ test_expect_success 'merge c1 with c2, c3, c4, c5' '
 
 test_expect_success 'pull c2, c3, c4, c5 into c1' '
        git reset --hard c1 &&
-       git pull . c2 c3 c4 c5 &&
+       git pull --no-rebase . c2 c3 c4 c5 &&
        test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
        test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
        test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&