Как получить потерянный коммит "autostash" из `git rebase --autostash`
Когда используешь git rebase --autostash
, git автоматически создает коммит "autostash" и повторно применяет его после успешной перезагрузки.
Но в случае отмены перебазирования (например, с помощью :cq
в Vim, когда это интерактивная перебазировка), autostash-commit может закончиться как висячий коммит.
Git 2.9.0
2 ответа
Git 2.10 (3 квартал 2016 года) должен полностью избежать этой проблемы.
Смотрите коммит 33ba9c6 (29 июня 2016 г.) Патрика Штейнхардта ( pks-t
)
(Объединено Юнио С Хамано - gitster
- в коммите 5eb1e9f, 13 июля 2016 г.)
rebase -i
: восстановить автозапуск при прерыванииКогда мы отменяем интерактивный ребаз, мы делаем это, вызывая
die_abort
, который очищает после нас, удаляя каталог состояния rebase.
Если пользователь запросил использование функции автозагрузки, каталог состояния также может содержать ссылку на автозагрузку, которая теперь будет удалена.Исправьте проблему, пытаясь повторно применить автозапуск в
die_abort
,
Это также будет обрабатывать случай, когда autostash больше не применяется чисто, записав его в видимый пользователем тайник.
Я нашел следующее, чтобы перечислить все коммиты "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