@@ -35,6 +35,9 @@ Default values for <repository> and <branch> are read from the
"remote" and "merge" configuration for the current branch
as set by linkgit:git-branch[1] `--track`.
+By default non-fast-forward merges fail, so you need to specify if you want to
+do a merge or a rebase.
+
Assume the following history exists and the current branch is
"`master`":
@@ -977,25 +977,6 @@ static int get_can_ff(struct object_id *orig_head, struct object_id *orig_merge_
return ret;
}
-static void show_advice_pull_non_ff(void)
-{
- advise(_("The pull was not a fast-forward, in the future you will have to choose\n"
- "between a merge or a rebase.\n"
- "\n"
- "To quell this message you have two main options:\n"
- "\n"
- "1. Adopt the new behavior:\n"
- "\n"
- " git config --global pull.mode fast-forward\n"
- "\n"
- "2. Maintain the current behavior:\n"
- "\n"
- " git config --global pull.mode merge\n"
- "\n"
- "For now we will fall back to the traditional behavior: merge.\n"
- "For more information check \"git help fast-forward\"."));
-}
-
int cmd_pull(int argc, const char **argv, const char *prefix)
{
const char *repo, **refspecs;
@@ -1123,14 +1104,9 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
can_ff = get_can_ff(&orig_head, &merge_heads.oid[0]);
- if (!can_ff) {
- if (!mode && opt_verbosity >= 0)
- show_advice_pull_non_ff();
-
- if (mode == PULL_MODE_FAST_FORWARD) {
- diverging_advice();
- die(_("The pull was not fast-forward, either merge or rebase.\n"));
- }
+ if ((!mode || mode == PULL_MODE_FAST_FORWARD) && !can_ff) {
+ diverging_advice();
+ die(_("The pull was not fast-forward, either merge or rebase.\n"));
}
if (opt_rebase >= REBASE_TRUE) {
@@ -897,38 +897,30 @@ setup_non_ff () {
setup_other main^
}
-test_expect_success 'fast-forward (pull.mode=fast-forward)' '
+test_expect_success 'fast-forward (default)' '
setup_ff &&
- git -c pull.mode=fast-forward pull
+ git pull
'
-test_expect_success 'non-fast-forward (pull.mode=fast-forward)' '
+test_expect_success 'non-fast-forward (default)' '
setup_non_ff &&
- test_must_fail git -c pull.mode=fast-forward pull
+ test_must_fail git pull
'
-test_expect_success 'non-fast-forward with merge (pull.mode=fast-forward)' '
+test_expect_success 'non-fast-forward with merge (default)' '
setup_non_ff &&
- git -c pull.mode=fast-forward pull --merge
+ git pull --merge
'
-test_expect_success 'non-fast-forward with rebase (pull.mode=fast-forward)' '
+test_expect_success 'non-fast-forward with rebase (default)' '
setup_non_ff &&
- git -c pull.mode=fast-forward pull --rebase
+ git pull --rebase
'
-test_expect_success 'non-fast-forward error message (pull.mode=fast-forward)' '
+test_expect_success 'non-fast-forward error message (default)' '
setup_non_ff &&
- test_must_fail git -c pull.mode=fast-forward pull 2> error &&
+ test_must_fail git pull 2> error &&
test_i18ngrep "The pull was not fast-forward" error
'
-test_expect_success 'non-fast-forward warning (default)' '
- setup_non_ff &&
- git pull 2> error &&
- cat error &&
- test_i18ngrep "The pull was not a fast-forward" error &&
- test_i18ngrep "in the future you will have to choose" error
-'
-
test_done
@@ -27,136 +27,6 @@ test_expect_success 'setup' '
git tag c3
'
-test_expect_success 'pull.rebase not set' '
- git reset --hard c0 &&
- git pull . c1 2>err &&
- test_i18ngrep ! "in the future you will have to choose" err
-'
-
-test_expect_success 'pull.mode set' '
- git reset --hard c0 &&
- test_config pull.mode merge &&
- git pull . c1 2>err &&
- test_i18ngrep ! "in the future you will have to choose" 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 ! "in the future you will have to choose" 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 ! "in the future you will have to choose" 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 ! "in the future you will have to choose" err
-'
-
-test_expect_success 'pull.rebase not set and --rebase given' '
- git reset --hard c0 &&
- git pull --rebase . c1 2>err &&
- test_i18ngrep ! "in the future you will have to choose" err
-'
-
-test_expect_success 'pull.rebase not set and --merge given' '
- git reset --hard c0 &&
- git pull --merge . c1 2>err &&
- test_i18ngrep ! "in the future you will have to choose" err
-'
-
-test_expect_success 'pull.rebase not set and --ff given' '
- git reset --hard c0 &&
- git pull --ff . c1 2>err &&
- test_i18ngrep ! "in the future you will have to choose" 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 ! "in the future you will have to choose" 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 ! "in the future you will have to choose" 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_decode_color <err >decoded &&
- test_i18ngrep "<YELLOW>hint: " decoded &&
- test_i18ngrep "in the future you will have to choose" decoded
-'
-
-test_expect_success 'pull.mode set' '
- git reset --hard c2 &&
- test_config pull.mode merge &&
- git pull . c1 2>err &&
- test_i18ngrep ! "in the future you will have to choose" err
-'
-
-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 "in the future you will have to choose" 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 "in the future you will have to choose" 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 "in the future you will have to choose" 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 ! "in the future you will have to choose" err
-'
-
-test_expect_success 'pull.rebase not set and --merge given (not-fast-forward)' '
- git reset --hard c2 &&
- git pull --merge . c1 2>err &&
- test_i18ngrep ! "in the future you will have to choose" 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 "in the future you will have to choose" 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 "in the future you will have to choose" 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 "in the future you will have to choose" err
-'
-
test_expect_success 'merge c1 with c2' '
git reset --hard c1 &&
test -f c0.c &&
The user has been warned that this change was coming and should have already configured his/her preference. It's time to flip the switch and make ff-only the default. There's no need for the annoying warning anymore. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> --- Documentation/git-pull.txt | 3 + builtin/pull.c | 30 +------- t/t5520-pull.sh | 28 +++----- t/t7601-merge-pull-config.sh | 130 ----------------------------------- 4 files changed, 16 insertions(+), 175 deletions(-)