你如何从`git rebase --autostash`中获得一个丢失的“autostash”提交

时间:2016-06-15 21:08:18

标签: git rebase

使用git rebase --autostash时,git会自动创建一个“自动转发”提交,并在成功重组后重新应用它。

但是如果重定位被中止(例如,当它是交互式rebase时在Vim中使用:cq),则autostash-commit可能最终成为悬空提交。

Git 2.9.0

2 个答案:

答案 0 :(得分:7)

我找到以下内容列出所有“autostash”提交:

git log --pretty='%cr: %h %s' $(git fsck --no-reflog \
  | grep '^dangling commit' | cut -f3 -d\ ) | grep ': autostash$'

然后,您可以使用提交哈希来获取提交,例如使用git showgit 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 33ba9c6Patrick 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不再干净地应用的情况,方法是将其记录在用户可见的藏匿处。