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-lease
es 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 X
envía el suyo origin/X
junto con el nuevo valor deseado; origin
Git te dice si hizo el intercambio o no.
origin
hizo el intercambio, ya está. De lo contrario, puede ejecutar git fetch origin
para 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 push
tiene 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 unafetch
opull
sin nuevas confirmaciones.