Se compromete con anticipación en un repository de espejo clonado de Git

Estoy usando git por un time, creando problemas y cosas raras, pero ahora me gustaría lograr un buen flujo de trabajo.

Este es el escenario, tengo algunos repositorys en github que quiero ingresar solo si tengo un compromiso decente.

Así que he clonado (- mirror) los repositorys github en mi estación de trabajo, así puedo trabajar en los espejos de mis laptops y localmente en mi estación de trabajo, sin meterme con github ("commit often, push once" como dicen).

Todo es muy bonito, pero una cosa fundamental que necesito saber antes de realizar un empujón desde un espejo hacia github es saber cuántas confirmaciones estoy delante del espejo (lo sé, el estado de git no funciona porque un espejo también es un repository de tipo simple).

Esquema simple de mi flujo de trabajo:

(git clonado) -> (git mirror en la estación de trabajo) -> (github)

Entonces, ¿cómo puedo saber cuántos commits estoy por delante en un repository duplicado clonado?

Dondequiera que realice la compra en el repository espejo (en el trabajo o en su computadora portátil). Agregue un segundo control remoto para github

git remote add github git@github.com:username/repo.git 

Cuando finalices tus commits, puedes empujarlos directamente a github sin tener que jugar con el espejo.

 git push github master 

Luego, cuando desee enviar un compromiso de WIP, simplemente use push como lo haría normalmente y en su lugar lo enviarán a su mirror. Entonces, para ver qué tan lejos está tu maestro de github, puedes hacer

 git log github/master..master 

En el repository espejo, al ejecutar git rev-list --count FETCH_HEAD..HEAD se mostrará el número de confirmaciones por las que el duplicado está por delante de su origen. Esto se basa en la última búsqueda que hiciste en el espejo, pero ten en count que la git fetch en el espejo borrará cualquier cambio que se haya cometido en el espejo, pero que no haya sido empujado al origen del espejo.

Puedes ver una image más detallada con

 git rev-list --count --left-right HEAD...FETCH_HEAD 

que da dos numbers; el primero es el número de confirmaciones en la twig actual que están presentes en el espejo pero no en el origen, y el segundo es el número de confirmaciones en la twig actual que están presentes en el origen pero no en el espejo (esto será positivo si restablece una bifurcación a una confirmación anterior, o rebase algunas confirmaciones que ya realizó).

Una solución más simple que mi otra respuesta: si git fetch al espejo, entonces todas las references son idénticas al origen, así que el estado de git fetch && git status en el clon del espejo en el que estás trabajando te dirá lo que necesitas saber (porque un espejo actualizado recientemente es una copy exacta de su origen).

Esto también tiene la ventaja de que funciona para cualquier twig, no solo para master .