tag - Pasar un argumento a un comando de alias de Git
¿qué hace git log-oneline? (3)
¿Puedo pasar argumentos al alias de un comando Git?
Tengo algunos alias en Git config, así:
rb1 = rebase -i HEAD~1
rb2 = rebase -i HEAD~2
rb3 = rebase -i HEAD~3
rb4 = rebase -i HEAD~4
....
¿Es posible hacer un alias rb
para que git rb <x>
funcione para cualquier <x>
?
Probé este alias:
rb = rebase -i HEAD~
pero entonces, por ejemplo, git rb 8
no funciona.
Escribí esta función "grb" para hacer el rebase interactivo de Git en una Mac, así que puedo decir grb 5
para mostrar mis últimos 5 confirmaciones:
function grb {
git rebase -i HEAD/~$1
}
La mejor respuesta en esta página no funciona para mí. Para ver mi .bash_profile
y todos los demás alias de Git que uso en mi Mac:
https://github.com/rayning0/bash_profile/blob/master/.bash_profile#L149
Si considera la sección de Git Faq "Alias de Git con argumento" , puede hacerlo, pero llamando a git a través de un shell:
[alias]
rb = "!sh -c /"git rebase -i HEAD~$1/" -"
No lo he probado todavía, pero si puedes pasar una discusión, esa sería la manera de hacerlo.
Una solución similar sería usar una función de shell :
[alias]
rb = "!f() { git rebase -i HEAD~$1; }; f"
Rebasando todas las confirmaciones desde la ramificación
Si solo desea volver a clasificar todas las confirmaciones que son nuevas en su rama, desde el momento en que se bifurca desde la rama principal, sería más fácil tener el siguiente alias en su configuración:
rbi = !sh -c /"git rebase -i `git merge-base $1 HEAD`/" -
Luego, si desea reajustar todas las confirmaciones que ha agregado a su rama actual, simplemente podría ejecutar:
git rbi parentBranch
Este enfoque utiliza un argumento, pero en lugar de tener que saber cuántas confirmaciones para regresar, solo debe proporcionar el nombre de la sucursal, y determina la confirmación más reciente compartida entre la sucursal actual y la sucursal principal a través de git merge-base
Por qué esto, en lugar de git rebase -i parentBranch
La razón por la que haría esto en lugar de una git rebase -i parentBranch
es que tal vez no quiera lidiar con los conflictos de fusión hasta un punto posterior, o incluso lidiar con un conflicto de combinación en un compromiso, y luego el mismo conflicto en la misma linea en otro commit. Consulte https://.com/a/31036645/444610