Sintaxis del range de revisión de Git Don't-repeat-yourself?

Supongamos que S es el SHA de un commit de git.

¿Cómo podemos express el range S^..S sin la molestia de repetir S?

En otras palabras, "dame el range de compromiso único que termina en el compromiso S".

(¿Y hay alguna manera que generalice a N commits que terminan en S?)

Leí a los man gitrevisions hacia atrás y hacia adelante; no encontré nada

¡Creo que estás buscando <tree-ish>^!

Vea la documentation de gitrevisions para más detalles:

Repetido por conveniencia:

<rev>^!, eg HEAD^!

Un sufijo ^ seguido de un signo de exclamación es lo mismo que dar commit <rev> y luego todos sus padres llevan el prefijo ^ para excluirlos (y sus ancestros).

No es tan fácil de entender, pero estoy bastante seguro de que es lo que está buscando.

Pero no veo una forma generalizada de hacer esto.

Podrías envolver esto en un alias de git pequeño y orderado:

 git config --global alias.range '!bash -c "git $1 ${2-HEAD}~$3..${2-HEAD}" -' 

Desglosando:

  1. Crea el range global de alias

     git config --global alias.range 
  2. Llamar a un command externo bash

     '!bash -c "<command>" -' 
  3. Llame a git con el primer parámetro como command

     git $1 
  4. Luego construye nuestro range fuera del segundo y tercer parámetro

    • ${2-HEAD} utiliza el segundo parámetro o el valor pnetworkingeterminado es HEAD de ninguno.
    • $3 es el número de confirmaciones que desea, estará vacío si no se proporciona el parámetro. suministrado

       ${2-HEAD}~$3..${2-HEAD} 

Ejemplo de uso:

 `git range log 4ab9f0d 4`