J'essaye de comprendre la différence entre
git push --force
et
git push --force-with-lease
Je suppose que ce dernier ne pousse vers la télécommande que si la télécommande n'a pas de commits que la branche locale n'a pas ?
--force-with-lease
est similaire à celle des instructions de comparaison et d'échange sur les processeurs modernes: celui qui veut que l'échange se produise fournit la valeur attendue et la nouvelle valeur. Le système effectuant le swap compare la valeur attendue avec la valeur actuelle réelle et effectue le swap si et seulement si les deux sont égaux. Avec git push
, la valeur attendue est celle qui se trouve dans le nom du suivi à distance, par exemple, git push --force-with-lease origin X
envoie la vôtre origin/X
avec la nouvelle valeur souhaitée; origin
's Git vous dit s'il a effectué l'échange ou non.
origin
fait l'échange, vous avez terminé. Si ce n'est pas le cas, vous pouvez exécuter git fetch origin
pour récupérer la nouvelle valeur actuelle, retravailler vos modifications si nécessaire et exécuter une autre comparaison et permutation forcée avec bail pour réessayer.
git help push
a des cas d'utilisation expliquant son objectif (essentiellement pour vous empêcher de détruire un changement que quelqu'un vient de pousser). Ce qui me semble peu clair, c'est comment fonctionne la branche de suivi à distance. Mais vraisemblablement, il devra généralement ressembler à ce à quoi il ressemblait la dernière fois que vous avez effectué unfetch
oupull
sans nouveaux commits.