Estoy tratando de entender la diferencia entre
git push --force
y
git push --force-with-lease
¿Supongo que este último solo empuja al control remoto si el control remoto no tiene confirmaciones que la rama local no tiene ?
--force-with-leasees similar a la de las instrucciones de comparar e intercambiar en las CPU modernas: el que desea que se produzca el intercambio proporciona el valor esperado y el nuevo valor. El sistema que realiza el intercambio compara el valor esperado con el valor actual real, y realiza el intercambio si y solo si los dos son iguales. Con git push, el valor esperado es lo que esté en el nombre de seguimiento remoto, por ejemplo, git push --force-with-lease origin Xenvía el suyo origin/Xjunto con el nuevo valor deseado; originGit te dice si hizo el intercambio o no.
originhizo el intercambio, ya está. De lo contrario, puede ejecutar git fetch originpara recoger el nuevo valor actual, modificar sus cambios si es necesario y ejecutar otra comparación de forzar con el arrendamiento para volver a intentarlo.
git help pushtiene casos de uso que explican su propósito (básicamente para evitar que arruines un cambio que alguien acaba de presionar). Lo que no me queda claro es cómo funciona la rama de seguimiento remoto. Pero presumiblemente, por lo general, tendrá que verse exactamente como se veía la última vez que hizo unafetchopullsin nuevas confirmaciones.