Я пытаюсь понять разницу между
git push --force
и
git push --force-with-lease
Я предполагаю, что последний только отправляет на удаленный, если удаленный не имеет коммитов, которых нет в локальной ветви ?
--force-with-lease
аналогична инструкциям сравнения и замены на современных процессорах: тот, кто хочет, чтобы произошел обмен, предоставляет ожидаемое значение и новое значение. Система, выполняющая обмен, сравнивает ожидаемое значение с истинным текущим значением и выполняет обмен, если и только если оба значения равны. С git push
ожидаемым значением будет то, что находится в имени удаленного отслеживания, например, git push --force-with-lease origin X
отправляет ваше собственное origin/X
вместе с новым желаемым значением; origin
Git говорит вам, если он сделал обмен или нет.
origin
сделал обмен, вы сделали. Если нет, вы можете запустить, git fetch origin
чтобы подобрать новое текущее значение, переработать ваши изменения, если необходимо, и выполнить еще одно принудительное сравнение и обмен, чтобы повторить попытку.
git help push
есть сценарии использования, объясняющие его назначение (в основном, чтобы вы не потеряли изменения, которые кто-то только что подтолкнул). Что мне немного неясно, так это то, как работает ветка удаленного отслеживания. Но, по-видимому, обычно нужно будет выглядеть именно так, как он выглядел в прошлый раз, когда вы делали коммитыfetch
илиpull
без них.