git push -f
Jonas Abreu em 27/01/2013Hoje aconteceu algo interessante durante os commits no Games.
Um dos commiters reverteu 3 commits que foram pra origin/master na hora errada usando git push -f
.
Aparentemente não existe problema algum nisso. Os commits não estavam lá, então o código estava correto.
Mais ou menos. O código realmente não estava lá, mas eu tinha os commits que foram apagados porque tinha
rodado um git pull
antes do git push -f
. Isso era um problema. Como apenas eu tinha feito isso,
simplesmente removi os commits da minha árvore e tudo estava certo. Mas imaginem que alguém faça isso
em um projeto muito mais ativo. Nesse momento ou todos removem os commits apagados ou as portas do
inferno se abrem de uma forma que vai ser muito difícil de fechar.
O git push -f
é uma operação muito destrutiva, uma vez que você simplesmente reescreve a árvore de commits
da origem para que ela fique igual à sua. Por essas razões ele só deve ser usado em situações de emergência
que você não consiga contornar de outra forma.
No caso que comentei, o mais simples era rodar um git revert HASH_DO_COMMIT nos commits, que resolveria
o problema porque o git revert
gera um novo commit revertendo as modificações introduzidas no commit referenciado.