Alban reported[1] that he expected merge to have an --autostash option, just like rebase. Since there's not really any reason why merge can't have it, let's implement it in this patchset. The actual logic isn't too bad. That change can be found in the last patch. The remainder is refactoring so that the change can be made easily. One thing I would like some attention on is if apply_autostash() is called in the right place. It's called somewhere above close_object_store() and also in the --abort case, just like in rebase, but I'm not quite sure if that's right. Since this is an RFC, we're missing tests and documentation but I've tested it and it seems to work reasonably well. [1]: https://github.com/gitgitgadget/git/issues/394 Denton Liu (7): Makefile: alphabetically sort += lists autostash: extract read_one() from rebase autostash: extract apply_autostash() from rebase autostash: extract reset_head() from rebase autostash: extract perform_autostash() from rebase autostash.c: undefine USE_THE_INDEX_COMPATIBILITY_MACROS merge: teach --autostash option Makefile | 75 +++++++-------- autostash.c | 239 ++++++++++++++++++++++++++++++++++++++++++++++ autostash.h | 24 +++++ builtin/merge.c | 13 +++ builtin/pull.c | 9 +- builtin/rebase.c | 240 +---------------------------------------------- t/t5520-pull.sh | 8 -- 7 files changed, 323 insertions(+), 285 deletions(-) create mode 100644 autostash.c create mode 100644 autostash.h -- 2.23.0.897.g0a19638b1e