Você quer comitar aquela excelente feature/test/bug, porém alguma coisa não esta certa. Uma ou outra informação não esta preenchida, a mensagem do commit esta errada, ou alguma outra coisa esta confusa. Vamos então ao que pode ser feito para corrigir de fato as informações associadas.
Corrigir o commit anterior é muito simples. Basta usar
git commit --amend
E isto irá disparar o commit no path $EDITOR para você brincar um pouco.
Simplesmente edite com a mensagem certa na linha superior do arquivo, salve, feche e está feito.
Agora vamos conversar sobre como voltar alguns commits para conserta-los, ou o commit que esta quebrado a alguns commits atrás. Este processo é um pouco mais complexo, mas não é tão difícil. (Agradeço ao Evan Phoenix por mais esta.)
Eis o cenário: os 3 últimos commit não tiveram um username correto, email, ou talvez mensagem no commit. Vamos iniciar pela geração do patch dos arquivos para os commits:
git format-patch HEAD^^^
Isto irá gerar arquivos no formato de 0001-commit-message contendo a diferença entre commit e metadados. Uma nota sobre o terceiro símbolo: apenas adicione um para cada commit que você quiser voltar, e seja coerente! EDITADO: Você pode fazer referência a commits passados com a sintaxe HEAD~n, como neste exemplo que usamos HEAD~3. Siga em frente e edite estes arquivos com as informações apropriadas. Feito isso, iremos resetar nosso repositório voltando atrás alguns commits:
git reset --hard HEAD^^^
Agora podemos aplicar a correção das informações de cada commit. Certifique-se de fazer isto na ordem certa! (Usualmente na ascendente)
git am < 0001... git am < 0002... git am < 0003...
Agora se você verificar em git log
você poderá visualizar as informações corretas. Se por alguma razão as coisas estiverem bagunçadas, faça um
git reset --hard origin/master
que irá trazer de volta as suas alterações originais. Uma vez que você tiver corrigido as informações, você precisará forçar um push no repositório:
git push -f
Se você não adicionar o -f
, o git irá reclamar. AVISO! Esteja ciente de que modificar mensagens dos commits pode estragar outros repositórios acima e devem ser usados com precaução. De fato, outros desenvolvedores talvez possam lhe odiar por causa disto. Se estiver longe o bastante para trás provavelmente será uma péssima idéia reescrever o histórico de qualquer maneira.
Se você souber de algum imprevisto ou se descobrir alguma consequência por favor nos informe nos comentários. Outras dicas no futuro irão cobrir a correção dos arquivos atuais commitados e como garantir que todos os repositórios estejam atualizados.