76 votes

Passer un argument à une commande d'alias Git

Puis-je passer des arguments à l'alias d'une commande Git ?

J'ai des alias dans la configuration de Git, comme ceci :

rb1 = rebase -i HEAD~1
rb2 = rebase -i HEAD~2
rb3 = rebase -i HEAD~3
rb4 = rebase -i HEAD~4
....

Est-il possible de faire un rb de manière à ce que git rb <x> fonctionne pour tous les <x> ?

J'ai essayé cet alias :

rb = rebase -i HEAD~

mais ensuite, par exemple git rb 8 ne fonctionne pas.

4 votes

Pourquoi faites-vous cela si souvent que vous pensez avoir besoin de ces alias ?

4 votes

La question vient en fait du raccourci "rebase", bien qu'elle semble dénuée de sens pour ces personnes. pas si des commandes fréquentes. Mais cette question peut être générale. Ainsi...

0 votes

102voto

VonC Points 414372

Si l'on considère les Faq Git section "Alias Git avec argument" vous pouvez le faire, mais en appelant git par l'intermédiaire d'un shell :

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

Je ne l'ai pas encore testé, mais si vous pouvez passer un argument, ce serait la meilleure façon de procéder.

Une solution similaire consisterait à utiliser un fonction d'obus :

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

0 votes

Merci de votre attention ! J'ai ajouté un alias pour montrer les fichiers dans un commit ($1 == commit hash). shf = "!shf() { git diff-tree --no-commit-id --name-only -r $1 ; } ; shf"

5 votes

J'utilise la version 1.7.12.4 sur Mac et je n'utilise jamais la fonction sh -c partie... "!git rebase -i HEAD~$1;" fonctionne bien pour moi.

3 votes

J'avais besoin de mettre un # jusqu'à la fin : [config] rbi = "!git rebase -i HEAD~$1 #"

5voto

seth flowers Points 3692

Rebasculer tous les commits depuis la création de la branche

Si vous voulez juste rebaser tous les commits qui sont nouveaux dans votre branche, depuis le moment où vous avez fait un branchement à partir de la branche mère, il serait plus facile d'avoir l'alias suivant dans votre configuration :

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

Ensuite, si vous voulez rebaser tous les commits que vous avez ajoutés à votre branche actuelle, vous pouvez simplement exécuter :

git rbi parentBranch

Cette approche utilise un argument, mais au lieu d'avoir à connaître le nombre de commits à remonter, vous fournissez simplement le nom de la branche, et il calcule le commit le plus récent partagé entre la branche courante et la branche mère via git merge-base

Pourquoi cela, plutôt que git rebase -i parentBranch ?

La raison pour laquelle vous feriez cela plutôt qu'une simple git rebase -i parentBranch est que vous pourriez ne pas vouloir gérer les conflits de fusion jusqu'à un moment ultérieur, ou même gérer un conflit de fusion dans un commit, puis le même conflit sur la même ligne dans un autre commit. Voir https://stackoverflow.com/a/31036645/444610

1voto

Raymond Gan Points 159

J'ai écrit cette fonction "grb" pour faire du rebasement interactif Git sur un Mac, afin de pouvoir dire grb 5 pour afficher mes 5 derniers engagements :

function grb {
  git rebase -i HEAD~$1
}

La réponse du haut de cette page ne fonctionne pas pour moi. Pour voir mon .zprofile et tous les autres alias Git que j'utilise sur mon Mac :

https://github.com/rayning0/zsh_profile/blob/master/.zprofile#L157

1voto

Andrew P Points 446

@Droogans a fait remarquer dans un commentaire sur la réponse acceptée que, au moins sur macOS (j'imagine qu'il en va de même pour tout système d'exploitation de type Unix, et peut-être même pour Windows), vous pouvez simplement utiliser $1 comme valeur de remplacement représentant l'argument dans l'alias. Ainsi, pour configurer un alias de manière à ce que git rb 8 devient git rebase -i HEAD~8 :

    rb = "!git rebase -i HEAD~$1;"

Vous pouvez également l'utiliser plusieurs fois dans un alias, de sorte que si, par exemple, vous vouliez un alias qui traduirait git f my-branch a git fetch origin my-branch:my-branch vous pouvez faire :

    f = "!git fetch origin $1:$1"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X