@@ -1133,7 +1133,14 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
die(_("cannot rebase with locally recorded submodule modifications"));
if (can_ff) {
- /* we can fast-forward this without invoking rebase */
+ /*
+ * We can fast-forward without invoking
+ * rebase, by calling run_merge(). But we
+ * have to allow rebase.autostash=true to kick
+ * in.
+ */
+ if (opt_autostash < 0)
+ opt_autostash = config_autostash;
opt_ff = "--ff-only";
ret = run_merge();
} else {
@@ -252,4 +252,16 @@ test_expect_success 'git pull --no-verify --verify passed to merge' '
test_must_fail git -C dst pull --no-ff --no-verify --verify
'
+test_expect_success 'git pull --rebase --autostash succeeds on ff' '
+ test_when_finished "rm -fr src dst actual" &&
+ git init src &&
+ test_commit -C src "initial" file "content" &&
+ git clone src dst &&
+ test_commit -C src --printf "more_content" file "more content\ncontent\n" &&
+ echo "dirty" >>dst/file &&
+ git -C dst pull --rebase --autostash >actual 2>&1 &&
+ grep -q "Fast-forward" actual &&
+ grep -q "Applied autostash." actual
+'
+
test_done
On a git pull --rebase, if fast forward is possible we run merge. However, merge will not honor rebase.autostash if it is configured. This has the unfortunate result of $ git config rebase.autostash true $ git pull --rebase to ignore the rebase.autostash value. Allow run_merge() to honor rebase.autostash by passing in config_autostash if --autostash or --no-autostash flags are not explicitly set. Reported-by: "Tilman Vogel" <tilman.vogel@web.de> Co-authored-by: "Junio C Hamano" <gister@pobox.com> Signed-off-by: "John Cai" <johncai86@gmail.com> --- Notes: Fix a bug that prevents git pull --rebase from honoring the rebase.autostash config value. Changes since V1: - used simpler fix as proposed by Junio - removed redundant test cases builtin/pull.c | 9 ++++++++- t/t5521-pull-options.sh | 12 ++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-)