Передать аргумент команде git alias


могу ли я передать аргументы в псевдоним команды Git?

у меня есть какой-то псевдоним в git config, например:

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 64

3 ответа:

Если вы считаете Git Faq раздел "Git псевдонимы с аргументом", вы могли бы сделать это, но, вызвав git через оболочку:

[alias]
        rb = "!sh -c \"git rebase -i HEAD~\" -"

Я еще не тестировал его, но если вы можете передать аргумент, это будет способ сделать это.

аналогичное решение было бы использовать функция Shell:

[alias]
        rb = "!f() { git rebase -i HEAD~; }; f"

перебазирование всех коммитов с момента ветвления

если вы просто хотите перебазировать все коммиты, которые являются новыми в вашей ветви, так как время, когда вы ветвились от родительской ветви, было бы проще просто иметь следующий псевдоним в вашей конфигурации:

rbi = !sh -c \"git rebase -i `git merge-base  HEAD`\" -

затем, если вы хотите перебазировать все коммиты, которые вы добавили в свою текущую ветку, вы можете просто запустить:

git rbi parentBranch

этот подход использует аргумент, но вместо того, чтобы знать, как многие коммиты возвращаются, вы просто указываете имя ветви, и он выясняет, что самая последняя фиксация разделена между текущей ветвью и родительской ветвью через git merge-base

почему это, а не git rebase-i parentBranch

причина, по которой вы сделали бы это, а не прямой git rebase -i parentBranch возможно, вы не захотите иметь дело с конфликтами слияния до более позднего момента или даже иметь дело с конфликтом слияния в одном коммите, а затем с тем же конфликтом на том же самом строка в другом коммите. Смотрите https://stackoverflow.com/a/31036645/444610

Я написал эту функцию "grb", чтобы сделать git interactive rebase на Mac, поэтому я могу сказать grb 5 показать мои последние 5 коммитов:

function grb {
  git rebase -i HEAD\~
}

лучшие ответы на этой странице не работает для меня. Чтобы увидеть мой .bash_profile и все другие псевдонимы Git, которые я использую на своем Mac:

https://github.com/rayning0/bash_profile/blob/master/.bash_profile#L149