Как вы получаете потерянное "autostash" commit из `git rebase --autostash`

При использовании git rebase --autostash, git автоматически создает фиксацию "autostash" и повторно применяет ее после успешной перезагрузки.

Но в случае, если перезагрузка отменена (например, с помощью :cq в Vim, когда она является интерактивной rebase), автосохранение-фиксация может закончиться как оборванная фиксация.

Git 2.9.0

Ответ 1

Git 2.10 (Q3 2016) следует полностью исключить эту проблему.

См. commit 33ba9c6 (29 июня 2016 г.) Патрик Штайнхардт (pks-t).
(слияние Junio ​​C Hamano - gitster - в commit 5eb1e9f, 13 июля 2016 г.)

rebase -i: восстановить autostash при прерывании

Когда мы прерываем интерактивную переадресацию, мы делаем это, вызывая die_abort, который очищает после нас, удаляя каталог состояния перестановки.
Однако, если пользователь запросил использовать функцию автозапуска, каталог состояний также может содержать ссылку на автозапуск, который теперь будет удален.

Исправить проблему, пытаясь повторно применить автосохранение в die_abort.
Это также будет обрабатывать случай, когда автосохранение не применяется чисто, записывая его в видимый пользователем тайник.

Ответ 2

Я нашел следующее, чтобы перечислить все "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