使用git rebase --autostash
时,git会自动创建一个“自动转发”提交,并在成功重组后重新应用它。
但是如果重定位被中止(例如,当它是交互式rebase时在Vim中使用:cq
),则autostash-commit可能最终成为悬空提交。
Git 2.9.0
答案 0 :(得分:7)
我找到以下内容列出所有“autostash”提交:
git log --pretty='%cr: %h %s' $(git fsck --no-reflog \
| grep '^dangling commit' | cut -f3 -d\ ) | grep ': autostash$'
然后,您可以使用提交哈希来获取提交,例如使用git show
或git cherry-pick
。
输出如下:
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
答案 1 :(得分:2)
Git 2。10(2016年第3季度)应该完全避免这个问题。
commit 33ba9c6见Patrick Steinhardt (pks-t
)(2016年6月29日)
(由Junio C Hamano -- gitster
--合并于commit 5eb1e9f,2016年7月13日)
rebase -i
:在中止时恢复自动转发当我们中止交互式rebase时,我们通过调用
die_abort
来执行此操作,die_abort
通过删除rebase状态目录来清理我们。 但是,如果用户请求使用自动暂存功能,则状态目录也可能包含对自动暂存的引用,现在将删除该引用。尝试在{{1}} 中重新应用自动暂停,以解决此问题。
这也将处理autostash不再干净地应用的情况,方法是将其记录在用户可见的藏匿处。