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-leasejest 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 pushprzypadku oczekiwaną wartością jest to, co znajduje się w nazwie zdalnego śledzenia, np. git push --force-with-lease origin XWysyła własną origin/Xwraz z nową żądaną wartością; originGit powie ci, czy dokonał wymiany, czy nie.
origindokonał wymiany, gotowe. Jeśli nie, możesz pobiec, git fetch originaby 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 pushma 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śfetchlubpullbez nowych zatwierdzeń.