summaryrefslogtreecommitdiff
path: root/branch.c
diff options
context:
space:
mode:
authorDenton Liu <liu.denton@gmail.com>2020-04-07 14:28:07 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-04-10 16:28:02 (GMT)
commita03b55530ab844974b7058042a015fcfcd9e7a53 (patch)
treebafe59f6e7bab8e6d37854fc7be2a85f71176425 /branch.c
parent804fe3155761e73c3dcc4e162ddb3ff560f16cd7 (diff)
downloadgit-a03b55530ab844974b7058042a015fcfcd9e7a53.zip
git-a03b55530ab844974b7058042a015fcfcd9e7a53.tar.gz
git-a03b55530ab844974b7058042a015fcfcd9e7a53.tar.bz2
merge: teach --autostash option
In rebase, one can pass the `--autostash` option to cause the worktree to be automatically stashed before continuing with the rebase. This option is missing in merge, however. Implement the `--autostash` option and corresponding `merge.autoStash` option in merge which stashes before merging and then pops after. This option is useful when a developer has some local changes on a topic branch but they realize that their work depends on another branch. Previously, they had to run something like git fetch ... git stash push git merge FETCH_HEAD git stash pop but now, that is reduced to git fetch ... git merge --autostash FETCH_HEAD When an autostash is generated, it is automatically reapplied to the worktree only in three explicit situations: 1. An incomplete merge is commit using `git commit`. 2. A merge completes successfully. 3. A merge is aborted using `git merge --abort`. In all other situations where the merge state is removed using remove_merge_branch_state() such as aborting a merge via `git reset --hard`, the autostash is saved into the stash reflog instead keeping the worktree clean. Helped-by: Phillip Wood <phillip.wood@dunelm.org.uk> Suggested-by: Alban Gruin <alban.gruin@gmail.com> Signed-off-by: Denton Liu <liu.denton@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'branch.c')
-rw-r--r--branch.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/branch.c b/branch.c
index 5794947..2d9e767 100644
--- a/branch.c
+++ b/branch.c
@@ -344,6 +344,7 @@ void remove_merge_branch_state(struct repository *r)
unlink(git_path_merge_rr(r));
unlink(git_path_merge_msg(r));
unlink(git_path_merge_mode(r));
+ save_autostash(git_path_merge_autostash(r));
}
void remove_branch_state(struct repository *r, int verbose)