Ссылка на git stash по номеру без stash @ {i} - PullRequest
0 голосов
/ 30 мая 2018

Я широко использую git stashes.Иногда становится неудобно набирать stash@{3}, когда на первый взгляд достаточно простого 3.Можно ли как-то использовать более короткую ссылку?

Я знаю решение с псевдонимами оболочки.Создание псевдонима типа

sshow = "!f { git stash show @{$@}; }; f"

позволяет использовать git sshow 1.Он даже позволяет передавать дополнительные аргументы в git stash show, если $@ правильно развернут.

Однако в этом случае автозаполнение git не работает: при вводе git stash show stash@{0} --<Tab><Tab> должны отображаться все опции git diff,но здесь ничего не известно о базовой команде.

Существуют ли другие способы создания такого псевдонима, который сохраняет исходный git diff контекст завершения?

Ответы [ 2 ]

0 голосов
/ 14 июля 2019

Git 2.22 (Q2 2019), git stash переписано на C.

См. commit 7906af0 , commit 90a4627 , commit 8d8e9c2 (25 февраля 2019 г.) Йоханнес Шинделин (dscho) .
См. коммит 40af146 , коммит 48ee24a , коммит ef0f0b4 , commit 64fe9c2 , commit 1ac528c , commit d553f53 , commit d4788af , commit 41e0dd5 , commit dc7bd38 , commit 130f269 , commit bef55dc , commit dac566c , commit ab8ad46 (25 февраля 2019) Пол-Себастьян Унгуряну (weekly-digest[bot]) .
См. commit c4de61d , commit 577c199 , commit 4e2dd39 , commit 8a0fc8d (25 февраля 2019 г.) от Джоэл Тейхроеб (klusark) .
(Объединено Junio ​​C Hamano - gitster - в commit e36adf7 , 22 апреля 2019 г.)


И ... "git stash show 23" раньше работал, но не мопосле переписывания в C ;эта регрессия была исправлена ​​в Git 2.23 (Q3 2019).

См. commit 63b50c8 (15 июня 2019) Thomas Gummerer (tgummerer) .
(Объединено с Junio ​​C Hamano - gitster - в коммит 99af5be , 09 июля 2019 г.)

stash: исправление показа ссылки на хранилище индекса

При преобразовании 'stash show' в C в dc7bd38 ("stash: преобразование шоу во встроенное", 2019-02-25, Gitv2.22.0-rc0), 'git stash show <n>', где n - индекс поврежденного тайника, если n не является файлом или верной версией.

'stash show 'принимает любой флаг' git diff 'принимает для изменения формата вывода.
Внутренне мы используем' setup_revisions() 'для разбора этих флагов командной строки.
В настоящее время мы передаем весь argv через' setup_revisions() ', который включает в себя индекс хранилища.

Поскольку индекс хранилища не является действительной версией или файлом в рабочем дереве, в большинстве случаев, однако, это вызов setup_revisions() (и, следовательно, вся команда) заканчивается неудачейесли мы используем эту форму 'git stash show'.

Вместо того, чтобы передавать весь argv в 'setup_revisions()', пропускайте только флаги (и имя команды), исключая при этом ссылку на тайник.
Ссылка на тайник уже проанализирована (и проверена) в 'get_stash_info()'.

Этот отдельный синтаксический анализ также означает, что в настоящее время мы производим правильный вывод, если команда выполнена успешно.

0 голосов
/ 30 мая 2018

Да, это встроено в Git начиная с v2.11.Вы можете ссылаться на любой тайник только по индексу.Например, чтобы применить тайник с индексом 2, вы можете набрать

git stash apply 2
...