diff options
author | Junio C Hamano <gitster@pobox.com> | 2017-06-13 13:27:03 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-06-13 13:27:03 -0700 |
commit | 9e60e21e53a6a8be899f9834955017e0ff6e6906 (patch) | |
tree | 35299757de16941997a2dd7d80a1ad1db5ace825 /builtin | |
parent | f24e079cb6ecaa217e593c2d2620187044ba1b0d (diff) | |
parent | f15e7cf5cc95cbfd0d05c260f75631781e290edc (diff) | |
download | git-9e60e21e53a6a8be899f9834955017e0ff6e6906.tar.gz |
Merge branch 'tb/pull-ff-rebase-autostash' into maint
"git pull --rebase --autostash" didn't auto-stash when the local history
fast-forwards to the upstream.
* tb/pull-ff-rebase-autostash:
pull: ff --rebase --autostash works in dirty repo
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/pull.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/builtin/pull.c b/builtin/pull.c index dd1a4a94e4..42f0560252 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -772,6 +772,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix) struct oid_array merge_heads = OID_ARRAY_INIT; struct object_id orig_head, curr_head; struct object_id rebase_fork_point; + int autostash; if (!getenv("GIT_REFLOG_ACTION")) set_reflog_message(argc, argv); @@ -800,8 +801,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix) if (!opt_rebase && opt_autostash != -1) die(_("--[no-]autostash option is only valid with --rebase.")); + autostash = config_autostash; if (opt_rebase) { - int autostash = config_autostash; if (opt_autostash != -1) autostash = opt_autostash; @@ -862,16 +863,18 @@ int cmd_pull(int argc, const char **argv, const char *prefix) die(_("Cannot rebase onto multiple branches.")); if (opt_rebase) { - struct commit_list *list = NULL; - struct commit *merge_head, *head; - - 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(); + if (!autostash) { + struct commit_list *list = NULL; + struct commit *merge_head, *head; + + 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 { |