Estou tentando entender a diferença entre
git push --force
e
git push --force-with-lease
Meu palpite é que o último só envia para o controle remoto se o controle remoto não tiver confirmações que a filial local não possui ?
--force-with-leaseé semelhante à das instruções de comparação e troca nas CPUs modernas: quem deseja que a troca ocorra forneça o valor esperado e o novo valor. O sistema que faz a troca compara o valor esperado com o valor atual verdadeiro e faz a troca se e somente se os dois forem iguais. Com git push, o valor esperado é o que estiver no nome do rastreamento remoto, por exemplo, git push --force-with-lease origin Xenvia o seu próprio origin/Xjunto com o novo valor desejado; originO Git diz se você fez a troca ou não.
originfez a troca, está feito. Caso contrário, você pode executar git fetch originpara pegar o novo valor atual, refazer suas alterações, se necessário, e executar outra comparação e troca de força com concessão para tentar novamente.
git help pushtem casos de uso explicando sua finalidade (basicamente para impedir que você troque uma alteração que alguém acabou de enviar). O que não está claro para mim é como o ramo de rastreamento remoto funciona. Mas, presumivelmente, normalmente será necessário ter a aparência exata da última vez que você fez umfetchoupullsem novos commit.