7. Repositórios remotos e GitHub

O perigo de reescrever o histórico em um repositório público

No capítulo anterior, sobre o histórico, aprendemos a corrigir commits com amend, reverter alterações e resetar branches. Todas essas operações reescrevem o histórico de commits de alguma forma. Isso não é problema em branches locais e repositórios privados, mas pode causar dor de cabeça quando você trabalha com repositórios públicos e outras pessoas.

Como assim?

Imagine que você deu um push de uma série de commits para um repositório público. Seus colaboradores puxaram esses commits e começaram a trabalhar em cima deles. Agora, se você voltar e der um amend, um revert ou um reset em qualquer um desses commits, estará basicamente mudando a base sobre a qual o trabalho deles foi construído.

Na próxima vez que seus colaboradores tentarem dar um push das alterações, vão receber um erro, porque o histórico da branch local deles não bate mais com o histórico da branch remota. Eles vão ter que reconciliar manualmente os históricos divergentes, o que pode ser um processo confuso e frustrante.

Entendi. E o que eu devo fazer em vez disso?

A regra de ouro é: nunca reescreva o histórico público. Depois de dar um push de um commit para um repositório público, considere que ele foi gravado em pedra. Se precisar corrigir algo, use git revert para criar um novo commit que desfaz as alterações, em vez de tentar modificar o commit existente.

Se não houver como escapar de reescrever o histórico (por exemplo, para remover dados sensíveis commitados por acidente), converse antes com seus colaboradores. Garanta que todo mundo puxou as alterações mais recentes e está na mesma página. Depois que você reescrever o histórico, cada pessoa vai precisar resetar a própria branch local para ficar de acordo com o novo histórico do remoto.

Anotado. Tem mais alguma coisa que eu deva saber?

Só mais uma coisa: cuidado com o git push --force. Esse comando sobrescreve a branch remota com a sua branch local, ignorando qualquer conflito. É como dizer: "não me importa o que está no remoto, quero que fique exatamente igual à minha branch local". Isso pode fazer colaboradores perderem trabalho, se eles tiverem subido commits que você não puxou antes de forçar o push.

A opção --force tem usos legítimos, mas só use quando entender totalmente as consequências. Se não tiver certeza, é melhor usar git push --force-with-lease, que pelo menos avisa se a branch remota tiver alterações que você não esperava.

Next step
Quer testar o modo história?

Faça o curso do jeito que ele foi pensado: progressão em pequenas doses, ordem linear e focada, desbloqueio gradual das entradas da Gitopedia. Continue com o Git de verdade no VS Code/Cursor/Antigravity/Windsurf a qualquer momento.

Modo história
GRATUITO
mas precisa de login