Нет. Код жестко кодирует команду применения в текущей реализации перебазирования :
argv_array_pushl(&stash_apply.args,
"stash", "apply", autostash.buf, NULL);
Попытка использовать pre-rebase
и post-rewrite
перехватывает ручное выполнение autosta sh по двум причинам:
- Если autosta sh отключена и есть незафиксированные изменения, rebase будет отменена раньше, а перехват
pre-rebase
никогда не будет вызван - Если включено autosta sh, хук
pre-rebase
запускается после того, как локальные изменения уже были сброшены, поэтому больше ничего не остается sh
К сожалению, autosta * Механизм 1059 * внутренне использует git stash create
для создания незаписанного коммита sta sh и сохраняет его в обычном списке sta sh только при сбое применения (используя git stash store <hash>
). Таким образом, не существует автоматического c способа найти коммит autosta sh для повторного применения с git stash apply --index
в хуке post-rewrite
.
Shortha sh autosta sh однако выводится на консоль. При этом его можно повторно применить вручную, выполнив следующие действия:
- Снова очистите состояние, используя
git reset --hard
- Повторно примените коммит autosta sh с помощью
git stash apply --index <shorthash>
Процесс можно сделать более приятным, обернув его в git псевдоним , который принимает в качестве аргумента autosta sh ha sh:
git config --global alias.reapply '![ ! -z "$1" ] && git stash && git stash apply --index "$1^0" && git stash drop || echo "usage: git reapply <autostash-hash>"'
Это делает команду git reapply <autostash-hash>
доступной. Он использует последовательность git stash
, применяет autosta sh, git stash drop
вместо git reset --hard
, чтобы упростить восстановление при случайных пробежках. Он также использует хитрость добавления ^0
к ha sh, что позволяет избежать его интерпретации как число sta sh, , как это делает код autosta sh для его вызова apply .