Sto cercando di capire la differenza tra
git push --force
e
git push --force-with-lease
La mia ipotesi è che quest'ultimo spinga al telecomando solo se il telecomando non ha commit che la filiale locale non ha ?
--force-with-lease
è simile a quella delle istruzioni di confronto e scambio sulle CPU moderne: chi vuole che avvenga lo scambio fornisce il valore atteso e il nuovo valore. Il sistema che esegue lo scambio confronta il valore atteso con il valore corrente vero e lo scambio se e solo se i due sono uguali. Con git push
, il valore atteso è quello che è nel nome di tracciamento remoto, ad esempio, git push --force-with-lease origin X
invia il tuo origin/X
insieme al nuovo valore desiderato; origin
Git ti dice se ha fatto lo scambio o no.
origin
fatto lo scambio, il gioco è fatto. In caso contrario, è possibile eseguire git fetch origin
per raccogliere il nuovo valore corrente, rielaborare le modifiche, se necessario, ed eseguire un altro confronto forzato e scambio per riprovare.
git help push
ha casi d'uso che ne spiegano lo scopo (sostanzialmente per impedirti di cestinare un cambiamento che qualcuno ha appena spinto verso l'alto). Ciò che non è chiaro per me è come funziona il ramo di tracciamento remoto. Ma presumibilmente in genere dovrà apparire esattamente come appariva l'ultima volta che hai fattofetch
opull
senza nuovi commit.