Передайте аргумент команде Git alias
Могу ли я передать аргументы в псевдоним команды Git?
У меня есть псевдоним в конфигурации Git, например:
rb1 = rebase -i HEAD~1
rb2 = rebase -i HEAD~2
rb3 = rebase -i HEAD~3
rb4 = rebase -i HEAD~4
....
Можно ли создать псевдоним rb
, чтобы git rb <x>
работал для любого <x>
?
Я пробовал этот псевдоним:
rb = rebase -i HEAD~
но тогда, например, git rb 8
не работает.
Ответы
Ответ 1
Если вы рассмотрите Git раздел "FAQ" Git Псевдонимы с аргументом, вы можете это сделать, но позвонив git через оболочку:
[alias]
rb = "!sh -c \"git rebase -i HEAD~$1\" -"
Я еще не тестировал его, но если вы можете передать аргумент, это будет способ сделать это.
Аналогичное решение было бы использовать функцию оболочки:
[alias]
rb = "!f() { git rebase -i HEAD~$1; }; f"
Ответ 2
Снятие всех коммитов с разветвления
Если вы просто хотите переустановить все коммиты, которые являются новыми в вашей ветке, так как время, когда вы разветвлялись от родительской ветки, было бы проще просто иметь следующий псевдоним в вашей конфигурации:
rbi = !sh -c \"git rebase -i `git merge-base $1 HEAD`\" -
Затем, если вы хотите переустановить все коммиты, добавленные в текущую ветку, вы можете просто запустить:
git rbi parentBranch
В этом подходе используется аргумент, но вместо того, чтобы знать, сколько коммитов следует возвращать, вы просто указываете имя ветки и вычисляете последнее последнее сообщение, разделяемое между текущей ветвью и родительской веткой, через git merge-base
Почему это, а не git rebase -i parentBranch
Причина, по которой вы это сделаете, а не прямая git rebase -i parentBranch
, состоит в том, что вам может не понадобиться бороться с конфликтами слияния до более поздней точки или даже иметь дело с конфликтом слияния в одном коммите, а затем тот же конфликт в одной строке в другой фиксации. См. fooobar.com/questions/4096/...
Ответ 3
@Droogans указал в комментарии на принятый ответ, что, по крайней мере в macOS (я думаю, то же самое будет справедливо для любой Unix-подобной ОС, и, возможно, даже для окон), вы можете просто использовать $1
в качестве значения заполнителя, представляющего аргумент в псевдониме. Итак, чтобы настроить псевдоним, чтобы git rb 8
стал git rebase -i HEAD~8
:
rb = "!git rebase -i HEAD~$1;"
Вы также можете использовать его несколько раз в псевдониме, поэтому, если, например, вам нужен псевдоним, который будет переводить git f my-branch
в git fetch origin my-branch:my-branch
, вы можете сделать:
f = "!git fetch origin $1:$1"
Ответ 4
Я написал эту функцию "grb" для интерактивного перебазирования Git на Mac, поэтому я могу сказать grb 5
, чтобы показать мои последние 5 коммитов:
function grb {
git rebase -i HEAD~$1
}
Верхний ответ на этой странице не работает для меня.
Чтобы увидеть мой .bash_profile
и все другие псевдонимы Git, которые я использую на своем Mac:
https://github.com/rayning0/bash_profile/blob/master/.bash_profile#L146