El problema con --force
Un git push --force simple sobrescribe el branch remoto con lo que tengas localmente. Si un compañero hizo push entre tu último fetch y tu push, sus commits se destruyen silenciosamente.
Qué hace --force-with-lease
git push --force-with-lease origin feature/login
Un ejemplo trabajado
git rebase origin/main
# Mientras tanto, un compañero hizo push
git push --force # sobrescribe su commit silenciosamente
git push --force-with-lease # rechazado:
# ! [rejected] feature/login -> feature/login (stale info)
Especificar el SHA esperado
git push --force-with-lease=feature/login:abc123 origin feature/login
Hacerlo el predeterminado
git config --global alias.pf 'push --force-with-lease'
La trampa del fetch
# MÁS SEGURO:
git fetch
git log origin/feature/login # mira de verdad
git push --force-with-lease
Alternativa más nueva: --force-if-includes
git push --force-with-lease --force-if-includes