git - сделать автозаполнение sh повторным применением индекса, как и в git sta sh --index - PullRequest
0 голосов
/ 09 апреля 2020

У меня установлено rebase.autostash=true в моем глобальном конфиге, и это здорово, если я могу перебазировать грязное рабочее дерево, но, похоже, нет опции --index, чтобы заставить autopop восстанавливать мои ранее подготовленные изменения, как вы можете сделать, когда вручную копите и высовываете через git apply/pop --index <StashID>. Вместо этого, после перебазировки и автоподключения, все изменения теперь не установлены.

Есть ли способ добавить --index к автоматическому копированию?

1 Ответ

2 голосов
/ 10 апреля 2020

Нет. Код жестко кодирует команду применения в текущей реализации перебазирования :

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...