Próbuję zrozumieć różnicę między
git push --force
i
git push --force-with-lease
Domyślam się, że ten ostatni wypycha do pilota tylko wtedy, gdy pilot nie ma zatwierdzeń, których nie ma lokalny oddział ?
--force-with-lease
jest podobna do instrukcji porównania i zamiany na nowoczesnych procesorach: ten, kto chce, aby nastąpiła zamiana, dostarcza oczekiwaną wartość i nową wartość. System dokonujący zamiany porównuje wartość oczekiwaną z rzeczywistą wartością bieżącą i dokonuje zamiany wtedy i tylko wtedy, gdy te dwie wartości są równe. W git push
przypadku oczekiwaną wartością jest to, co znajduje się w nazwie zdalnego śledzenia, np. git push --force-with-lease origin X
Wysyła własną origin/X
wraz z nową żądaną wartością; origin
Git powie ci, czy dokonał wymiany, czy nie.
origin
dokonał wymiany, gotowe. Jeśli nie, możesz pobiec, git fetch origin
aby pobrać nową bieżącą wartość, przerobić zmiany, jeśli to konieczne, i przeprowadzić kolejne porównanie i zamianę typu wymuszenie z dzierżawą, aby spróbować ponownie.
git help push
ma przypadki użycia wyjaśniające jego cel (zasadniczo po to, aby nie zniszczyć zmiany, którą ktoś właśnie podniósł). To, co jest dla mnie trochę niejasne, to sposób działania gałęzi zdalnego śledzenia. Ale prawdopodobnie zazwyczaj będzie musiał wyglądać dokładnie, jak wyglądał ostatnim razem, gdy robiłeśfetch
lubpull
bez nowych zatwierdzeń.