Especificando enésima confirmación de git pendiente, relativa a la twig ascendente

Mientras estaba leyendo git: presioné una única confirmación y pensé en enviar confirmaciones en lotes pequeños, comencé a preguntarme si podría especificar la revisión local relativa al número de confirmaciones que deseo enviar de inmediato.

Por ejemplo, digamos que tengo 12 compromisos pendientes para impulsar. Puedo usar HEAD~9 para impulsar los primeros 3 commits pendientes; para presionar los próximos 3, tengo que usar HEAD~6 y así sucesivamente. Pero me gustaría poder utilizar el historial de mi shell sin tener que editarlo para cada lote.

 $ git log --oneline myremote/mybranch..mybranch 0a594a4 Blah blah 12 9a4b42e Blah blah 11 d81227e Blah blah 10 803f1d3 Blah blah 9 aa7dcbc Blah blah 8 fc410e6 Blah blah 7 d57198e Blah blah 6 75f8ed6 Blah blah 5 4e801b4 Blah blah 4 7333461 Blah blah 3 3bc453e Blah blah 2 562690f Blah blah 1 

Obviamente puedo presionar 1-3 con git push myremote 7333461:mybranch , también puedo usar HEAD~9:mybranch , pero ¿hay alguna manera de decir algo como myremote/mybranch+3 , para get el mismo hash? Todo lo que he intentado con rev-parse me lleva hacia atrás, relativo a HEAD o myremote / mybranch (cuando funciona).

La mala noticia es que no puede haber un equivalente a HEAD ^ que espera porque la estructura de commit de Git solo conoce a sus padres. Lo siento. Puedes escribir una utilidad para hacerlo.

Tiene que tener un lugar para mirar el pasado desde. Podrías lograr esto retrocediendo de cada twig o label hasta que encuentres HEAD, pero eso podría requerir un cruce de treees completo (no tan ineficiente como crees) y ambiguo.

Sin embargo, tu pregunta específica tiene una cuna. Puede mirar hacia atrás desde la twig remota de la twig actual, que está disponible como @{u} ("u" para "ascendente"). Pon este progtwig en tu RUTA como git-unpushed-ref o algo así.

 #!/bin/sh NUMBER=$1 git log --pretty=format:%H @{u}..HEAD | tail -n$NUMBER | head -n1 

Ahora puedes escribir git push origin $(git unpushed-ref 3):master o build un pequeño contenedor de shell alnetworkingedor de eso.