Когда вы передаете аргумент псевдониму, Git помещает этот аргумент после раскрытия псевдонима.
Это верно, даже если вы используете $<em>number</em>
в расширении. Таким образом, расширение текста:
!git branch shelve_$1;git checkout shelve_$1;git push -u origin shelve_$1
при вызове становится:
git branch shelve_pbi405783;
git checkout shelve_$pbi405783;
git push -u origin shelve_pbi405783 pbi405783
(Я разбил это на три отдельные строки для демонстрации и обсуждения - внутренне это одна большая строка).
Первая и вторая команды и делают то, что вы хотите.
Третья команда говорит, что нужно две ссылки , с установленной опцией -u
, на удаленный origin
. Первая ссылка - shelve_pbi405783
, то, что вы хотите; вторая ссылка pbi405783
.
Git успешно отправляет shelve_pbi405783
и устанавливает его восходящий поток на origin/shelve_pbi405783
, но не может нажать pbi405783
, так как он не существует. Таким образом, он печатает это сообщение об ошибке и останавливается после выполнения того, что вы хотите.
Вы можете просто проигнорировать ошибку, но было бы лучше ее избежать. Чтобы избежать этого, вы должны написать команду оболочки, которая принимает и удаляет дополнительный аргумент. Обычный метод - написать функцию оболочки :
'!f() { ...; } f'
Затем сама функция оболочки получает параметры, и если она содержит буквенные строки $<em>number</em>
, они расширяют соответствующий параметр. (Так что теперь не имеет значения, расширяется ли Git $1
.)