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 Xinvia il tuo origin/Xinsieme al nuovo valore desiderato; originGit ti dice se ha fatto lo scambio o no.
originfatto lo scambio, il gioco è fatto. In caso contrario, è possibile eseguire git fetch originper raccogliere il nuovo valore corrente, rielaborare le modifiche, se necessario, ed eseguire un altro confronto forzato e scambio per riprovare.
git help pushha 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 fattofetchopullsenza nuovi commit.