Передайте аргумент команде псевдонима Git
Могу ли я передать аргументы псевдониму команды 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
не работает.
3 ответа
Если вы рассматриваете раздел Git Faq "Git Aliases with аргумент", вы можете сделать это, но вызывая git через оболочку:
[alias]
rb = "!sh -c \"git rebase -i HEAD~$1\" -"
Я еще не проверял это, но если вы можете передать аргумент, это был бы способ сделать это.
Аналогичное решение будет использовать функцию оболочки:
[alias]
rb = "!f() { git rebase -i HEAD~$1; }; f"
Перебазирование всех коммитов с момента ветвления
Если вы просто хотите перебазировать все коммиты, которые являются новыми в вашей ветке, со времени, когда вы разветвлялись от родительской ветки, было бы проще просто иметь следующий псевдоним в вашей конфигурации:
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
в том, что вы можете не захотеть иметь дело с конфликтами слияния до более поздней точки или даже иметь дело с конфликтом слияния в одном коммите, а затем с тем же конфликтом на той же строке в другом коммите. См. /questions/8355960/kak-mne-ispolzovat-git-rebase-i-chtobyi-otmenit-vse-izmeneniya-v-vetke/8355973#8355973
Я написал эту функцию "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
@Droogans указал в комментарии на принятый ответ, что, по крайней мере, на macOS (я думаю, то же самое будет справедливо для любой Unix-подобной ОС, и, возможно, даже для Windows), вы можете просто использовать $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"