When using git rebase --autostash
, git automatically creates an "autostash" commit, and will re-apply it after a successful rebase.
But in case the rebasing is aborted (e.g. by using :cq
in Vim when it's an interactive rebase), the autostash-commit might end up as a dangling commit.
Git 2.9.0
I have found the following to list all "autostash" commits:
git log --pretty='%cr: %h %s' $(git fsck --no-reflog \
| grep '^dangling commit' | cut -f3 -d\ ) | grep ': autostash$'
You can then use the commit hash to get the commit back, e.g. using git show
or git cherry-pick
.
The output looks like this:
Checking object directories: 100% (256/256), done.
2 minutes ago: 7a50bcb On improve-moving-out-of-zoomed-tmux-pane: autostash
22 minutes ago: 9c504af On pr-123: autostash
5 weeks ago: f216b45 On look-for-vim-with-pgrep-ps: autostash
9 weeks ago: f405faa On look-for-vim-with-pgrep-ps: autostash
10 weeks ago: 28ddead On look-for-vim-with-pgrep-ps: autostash
Git 2.10 (Q3 2016) should avoid that issue entirely.
See commit 33ba9c6 (29 Jun 2016) by Patrick Steinhardt (pks-t
).
(Merged by Junio C Hamano -- gitster
-- in commit 5eb1e9f, 13 Jul 2016)
rebase -i
: restore autostash on abortWhen we abort an interactive rebase we do so by calling
die_abort
, which cleans up after us by removing the rebase state directory.
If the user has requested to use the autostash feature, though, the state directory may also contain a reference to the autostash, which will now be deleted.Fix the issue by trying to re-apply the autostash in
die_abort
.
This will also handle the case where the autostash does not apply cleanly anymore by recording it in a user-visible stash.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With