Crear alias en git

Soy muy nuevo en Git, y estoy tratando de pasar por las confirmaciones de un repository. En lugar de copyr y pegar los SHA para cada commit, estoy usando este método para get el siguiente commit después de HEAD :

git checkout $(git rev-list HEAD..master | tail -n 1) 

Esto funciona perfectamente, pero lo estoy usando mucho, así que me gustaría limpiar un poco la syntax con un alias .

Primer bash

En un mundo ideal, una function llamada algo así como "child-sha" devolvería el contenido de la búsqueda completa para que se le pudiera llamar así en powershell:

 git checkout child-sha 

Si abre el file /.config, puedo agregar el command agregando la siguiente sección:

 [alias] child-sha = $(git rev-list HEAD..master | tail -n 1) 

Pero cuando lo ejecuto, aparece el siguiente error

La expansión de alias 'child-sha' falló; '$ (git' no es un command git

Segundo bash

De acuerdo, entonces no usar $() . Si edito el file de configuration de la siguiente manera:

 [alias] child-sha = rev-list HEAD..master | tail -n 1 

Entonces llame así:

 git checkout $(git child-sha) 

Entonces me aparece el siguiente error

fatal: argumento ambiguo '|': revisión desconocida o ruta no en el tree de trabajo

Tercer bash – Trabajando, pero descuidado

De acuerdo, entonces no use el Pipe ( | ). Si actualizo mi file de configuration de esta manera:

 git config --local alias.child-shas "rev-list HEAD..master" 

Entonces llamo así:

 get checkout $(git child-shas | tail -n 1) 

Entonces funciona, pero no he ahorrado tanto espacio.

No estoy seguro de qué hacen cada una de las funciones del script, ya que soy muy nuevo en los commands de Git y Powershell en general. Google busca los documentos para usar $ , o | o la tail no revela nada útil ya que los caracteres especiales a menudo se eliminan de las búsquedas.

¿Hay alguna forma de abreviar esta function?


En una consulta por separado, lo que realmente estoy buscando es simplemente revisar cada comprobación para poder ver toda la base de códigos en ese momento, así puedo configurar una pequeña demostración para una presentación. No parece que ningún editor de GUI ( GitHub Windows , gitk o Visual Studio Tools para Git ) le brinde la posibilidad de verificar un compromiso en particular; digamos, por ejemplo, haciendo clic derecho en la list de commits.

Te estás perdiendo el truco básico que (ver "a less que" en un momento) los alias de git son solo commands directos de solo git, sin shell involucrado y sin capacidad para ejecutar commands que no sean git:

 [alias] foo = checkout 

¡a less que sea precedido por un escape de caparazón ! personaje:

 [alias] bar = !git checkout 

(en este punto ambos alias significan lo mismo). Dado que desea que el shell se involucre, para ejecutar subcommands $(...) y pipes ... | ... ... | ... -Estas son todas cosas "shell", no cosas "git", ¡necesitas la ! syntax de prefijo Todo el rest de tu experimentación será mucho mejor.


Dicho esto, abordando su problema base: sé muy poco sobre la mayoría de los editores de GUI, pero en gitk puede seleccionar cualquier revisión que desee en el panel superior, click el selector "tree" en el panel inferior derecho y luego select cualquier file en el tree (pasando por directorys según sea necesario) para ver el file en el panel inferior izquierdo. Es cierto que esto no te dará todo el tree, por supuesto, solo un file a la vez. (Haga clic en el selector "parche" para volver a ver los parches).

La otra cosa que haría aquí es evitar estas operaciones de HEAD -relative cuando sea posible: en lugar de "step forward one" (que es complicado), puede comenzar desde un punto fijo conocido, o al less, arreglado para la duración del demostración, como un nombre de sucursal, y use la syntax de revisión de git (consulte gitrevisions ) para seleccionar confirmaciones, sin importar lo lejos que se encuentre:

 git checkout master~5 ... demonstrate something ... git checkout master~4 ... demonstrate next thing ... 

La syntax de ~ n le dice a git que cuente hacia atrás para n padres, siguiendo solo enlaces de primer padre en caso de confusiones de fusión. Como 4 es uno less que 5, el master~4 es necesariamente un salto más cercano al master que el master~5 . (Si hay fusiones, los dos elementos que se fusionan son la misma distancia, en forma de lúpulo, desde cualquier punto de partida que elijas, por lo que este método particular es demasiado simple para capturar la verdad. Puedes empezar a hacer master~3^2~2 por ejemplo, pero se vuelve bastante complicado).