Saya mencoba memahami perbedaan antara keduanya
git push --force
dan
git push --force-with-lease
Dugaan saya adalah bahwa yang terakhir hanya mendorong ke remote jika remote tidak memiliki komitmen yang tidak dimiliki cabang lokal ?
--force-with-lease
mirip dengan instruksi compare-and-swap pada CPU modern: orang yang menginginkan swap terjadi memasok nilai yang diharapkan dan nilai baru. Sistem yang melakukan swap membandingkan nilai yang diharapkan dengan nilai aktual saat ini, dan melakukan swap jika dan hanya jika keduanya sama. Dengan git push
, nilai yang diharapkan adalah apa pun yang ada dalam nama pelacakan jarak jauh, misalnya, git push --force-with-lease origin X
mengirimkan nilai Anda sendiri origin/X
bersama dengan nilai yang diinginkan baru; origin
Git memberi tahu Anda apakah itu pertukaran, atau tidak.
origin
melakukan pertukaran, Anda selesai. Jika tidak, Anda dapat berlari git fetch origin
untuk mengambil nilai saat ini yang baru , mengolah kembali perubahan Anda jika perlu, dan menjalankan pembandingan dan pertukaran swap-paksa dengan yang lain untuk mencoba lagi.
git help push
memiliki use-case yang menjelaskan tujuannya (pada dasarnya untuk menjaga Anda agar tidak merusak perubahan yang baru saja seseorang dorong). Apa yang sedikit tidak jelas bagi saya adalah cara kerja cabang pelacakan jarak jauh. Tapi mungkin itu perlu terlihat persis seperti apa yang terlihat terakhir kali Anda melakukanfetch
ataupull
tanpa komitmen baru.