Hi, This script explains and tests what's going on: https://gist.github.com/tylerbrazier/4478e76fe44bf6657d4d3da6c789531d pull is failing because it shortcuts to --ff-only then calls run_merge(), which does not know how to autostash. Removing the shortcut fixes the problem: diff --git a/builtin/pull.c b/builtin/pull.c index dd1a4a94e..225a59f5f 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -868,11 +868,6 @@ int cmd_pull(int argc, const char **argv, const char *prefix) head = lookup_commit_reference(orig_head.hash); commit_list_insert(head, &list); merge_head = lookup_commit_reference(merge_heads.oid[0].hash); - if (is_descendant_of(merge_head, list)) { - /* we can fast-forward this without invoking rebase */ - opt_ff = "--ff-only"; - return run_merge(); - } return run_rebase(&curr_head, merge_heads.oid, &rebase_fork_point); } else { return run_merge();