Ссылка на git stash по номеру без stash@{i}
Я широко использую git stashes. Иногда становится неудобно печатать stash@{3}
когда, на первый взгляд, простой 3
должно хватить. Можно ли как-то использовать более короткую ссылку?
Я знаю решение с псевдонимами оболочки. Создание псевдонима как
sshow = "!f { git stash show @{$@}; }; f"
позволяет использовать git sshow 1
, Это даже позволяет передавать дополнительные аргументы git stash show
если $@
расширен правильно.
Однако в этом случае git autocomplete не работает: когда git stash show stash@{0} --<Tab><Tab>
набрано должно показать все git diff
варианты, но здесь он ничего не знает о базовой команде.
Существуют ли другие способы сделать такой псевдоним, который сохранит оригинал git diff
контекст завершения?
1 ответ
Да, это встроено в Git начиная с v2.11. Вы можете ссылаться на любой тайник только по индексу. Например, чтобы применить тайник в индексе 2, вы можете набрать
git stash apply 2
Git 2.22 (второй квартал 2019 г.), git stash
переписан на C.
См. Commit 7906af0, commit 90a4627, commit 8d8e9c2 (25 февраля 2019 г.) Йоханнес Шинделин (dscho
).
См совершать 40af146, совершать 48ee24a, совершают ef0f0b4, совершают 64fe9c2, совершают 1ac528c, совершают d553f53, совершают d4788af, совершают 41e0dd5, совершают dc7bd38, совершают 130f269, совершают bef55dc, совершают dac566c, совершают ab8ad46 (25 фев 2019) от Paul-Себастьян Унгуряну (weekly-digest[bot]
).
См. Commit c4de61d, commit 577c199, commit 4e2dd39, commit 8a0fc8d (25 февраля 2019 г.) Джоэл Тейхроб (klusark
).
(Слияние Junio C Hamano -gitster
- в коммите e36adf7, 22 апр 2019)
А также... "git stash show 23
" раньше работало, но больше не работает после переписывания на C; эта регрессия была исправлена в Git 2.23 (3 квартал 2019 г.).
См. Commit 63b50c8 (15 июня 2019 г.) Томас Гаммерер (tgummerer
).
(Слияние Junio C Hamano -gitster
- в коммите 99af5be, 09 июл 2019)
тайник: исправлено отображение индекса тайника ссылок
При преобразовании '
stash show
'в C в dc7bd38 ("stash
: convert show to builtin", 2019-02-25, Git v2.22.0-rc0), 'git stash show <n>
', гдеn
сломался ли индекс тайника, еслиn
сам по себе не является файлом или действительной версией.'
stash show
'принимает любой флаг'git diff
'принимает изменение формата вывода.
Внутри мы используем 'setup_revisions()
'для анализа этих флагов командной строки.
В настоящее время мы проходим весьargv
Через 'setup_revisions()
', который включает индекс тайника.Однако, поскольку индекс тайника не является действительной ревизией или файлом в рабочем дереве, в большинстве случаев это '
setup_revisions()
'call (и, следовательно, вся команда) завершается ошибкой, если мы используем эту форму'git stash show
'.Вместо того, чтобы передать все
argv
к 'setup_revisions()
', передавать только флаги (и имя команды), исключая ссылку на тайник.
Ссылка на тайник анализируется (и проверяется) в 'get_stash_info()
' уже.Этот отдельный синтаксический анализ также означает, что в настоящее время мы производим правильный вывод, если команда завершается успешно.