diff options
author | Ramkumar Ramachandra <artagnon@gmail.com> | 2013-05-12 17:26:41 +0530 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-05-29 10:34:54 -0700 |
commit | 587947750bd73544a6a99811f0ddfd64e1ff1445 (patch) | |
tree | b26e7a4526e1e2a658e65e18da0ebde73474362f /t/t4034/cpp | |
parent | rebase --merge: return control to caller, for housekeeping (diff) | |
download | tgif-587947750bd73544a6a99811f0ddfd64e1ff1445.tar.xz |
rebase: implement --[no-]autostash and rebase.autostash
This new feature allows a rebase to be executed on a dirty worktree or
index. It works by creating a temporary "dangling merge commit" out
of the worktree and index changes (via 'git stash create'), and
automatically applying it after a successful rebase or abort.
rebase stores the SHA-1 hex of the temporary merge commit, along with
the rest of the rebase state, in either
.git/{rebase-merge,rebase-apply}/autostash depending on the kind of
rebase. Since $state_dir is automatically removed at the end of a
successful rebase or abort, so is the autostash.
The advantage of this approach is that we do not affect the normal
stash's reflogs, making the autostash invisible to the end-user. This
means that you can use 'git stash' during a rebase as usual.
When the autostash application results in a conflict, we push
$state_dir/autostash onto the normal stash and remove $state_dir
ending the rebase. The user can inspect the stash, and pop or drop at
any time.
Most significantly, this feature means that a caller like pull (with
pull.rebase set to true) can easily be patched to remove the
require_clean_work_tree restriction.
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t4034/cpp')
0 files changed, 0 insertions, 0 deletions