2
respostas

Diferença entre git -f push e git -u push

Olá, tudo bem?

Tentei fazer o git -u push e as atualizações eram rejeitadas porque diziam que eu precisava faz o git pull pra depois o git push por conta de alterações que não eram contempladas. Pesquisando na internet vi que havia uma outra opção: git -f push (site de ref.: https://stackoverflow.com/questions/10298291/cannot-push-to-github-keeps-saying-need-merge). Tentei por ele e deu certo, porém pediram pra tomar cuidado com o uso desse comando.

Qual é a diferença e qual o impacto de usa-lo ao invés do git -u push?

2 respostas

Oi Lara,

A flag -u é usada para definir o origin como o repositório remoto na sua configuração do git. Conforme você envia o branch local com a opção git push -u, esse branch local é vinculado ao branch remoto automaticamente. A vantagem é que você pode usar git pull sem nenhum argumento.

Lara, as atualizações foram rejeitadas porque provavelmente o seu branch local estava desatualizado ou não sincronizado em relação ao branch do repositório remoto que era o "alvo" do seu git push.

Por padrão, o comando git push se recusa a atualizar um branch remoto cujo histórico não esteja rigorosamente contido no branch local que está tentando sobrescrevê-lo. Uma outra maneira (mais amigável) de dizer: o branch remoto não pode conter em seu histórico (em seu log) qualquer commit que não esteja presente no histórico do branch local, caso contrário, o git push não funcionará.

Nesse caso, você primeiramente precisaria trazer as mudanças do branch remoto para o seu branch local e só então fazer o merge. Em outras palavras, você teria que executar um git pull para obter e aplicar as mudanças do seu branch remoto no seu branch local correspondente e, se tudo ocorrer bem, proceder a uma nova tentativa de execução do git push.

O Otávio Prado já explicou bem que a flag -u serve para vincular um branch local a um branch remoto.

A respeito da flag -f: se ela for usada, aquela restrição mencionada nos segundo e terceiro parágrafos deixa de ser verificada; assim, o sistema Git passa a permitir que o git push execute irrestritamente, e que o branch local sobrescreva o branch remoto – o que pode causar a perda de commits do branch remoto. Isso seria especialmente problemático em uma situação de trabalho colaborativo, pois poderia deletar as mudanças, os commits, eventualmente enviados por outra pessoa para o servidor (por isso, há a advertência para se usar o -f com muito cuidado).