Como Combinar Commits no Git?

O Git é uma das ferramentas de controle de versão mais populares do mundo, amplamente utilizada por desenvolvedores para gerenciar o histórico de projetos e colaborar em equipes. Uma das funcionalidades mais úteis, mas muitas vezes subestimadas, é a capacidade de combinar commits. Esta funcionalidade permite que você organize e simplifique o histórico de commits, tornando-o mais claro e legível.

Neste artigo, exploraremos como combinar commits no Git de maneira eficiente. Vamos abordar os cenários em que é apropriado combinar commits, as diferenças entre merge e rebase, e fornecer exemplos práticos com comandos que você pode usar em seu projeto.

O Que Significa Combinar Commits?

Combinar commits no Git é o processo de unir múltiplos commits em um único commit. Isso pode ser útil em diversas situações, como:

  • Limpar o histórico de commits antes de compartilhar código com outros desenvolvedores.
  • Remover commits redundantes ou desnecessários.
  • Ajustar um conjunto de alterações em um único ponto lógico no histórico.

Os dois principais comandos usados para combinar commits são git rebase e git merge. No entanto, a abordagem mais comum para essa tarefa envolve o uso do comando git rebase com a opção -i (rebase interativo).

Quando Usar o Rebase Interativo?

O rebase interativo é mais adequado em situações onde você deseja:

  • Organizar o histórico de commits local antes de compartilhar o código.
  • Combinar múltiplos commits relacionados em um único commit para melhor legibilidade.
  • Remover ou editar mensagens de commits antigos.

É importante observar que o rebase interativo deve ser usado apenas em branches locais que ainda não foram compartilhados com outros desenvolvedores. Isso evita conflitos ao reescrever o histórico.

Como Combinar Commits Usando git rebase -i

A seguir, detalhamos um guia passo a passo para combinar commits usando o rebase interativo:

1. Identifique o Intervalo de Commits

Primeiro, determine o intervalo de commits que você deseja combinar. Você pode usar o comando git log para inspecionar o histórico de commits:

git log --oneline

O comando acima exibirá o histórico de commits em formato compacto. Anote o hash do commit anterior ao intervalo que deseja modificar.

2. Inicie o Rebase Interativo

Com o hash identificado, inicie o rebase interativo com o seguinte comando:

git rebase -i <hash_do_commit>

Substitua <hash_do_commit> pelo hash do commit anterior ao intervalo de commits que deseja combinar.

3. Edite a Lista de Commits

O Git abrirá um editor de texto com uma lista de commits. Algo como:


pick abc123 Primeiro commit
pick def456 Segundo commit
pick ghi789 Terceiro commit

Para combinar commits, substitua pick por squash (ou simplesmente s) nos commits que deseja mesclar ao commit acima:


pick abc123 Primeiro commit
squash def456 Segundo commit
squash ghi789 Terceiro commit

4. Edite a Mensagem do Commit

Após salvar e sair do editor, o Git solicitará que você edite a mensagem do commit resultante. Você pode combinar as mensagens existentes ou criar uma nova:


# Mensagens dos commits combinados:
# Primeiro commit
# Segundo commit
# Terceiro commit

Edite a mensagem como preferir, salve e feche o editor.

5. Complete o Rebase

O Git processará o rebase e combinará os commits especificados. Caso ocorram conflitos, você precisará resolvê-los manualmente e, em seguida, continuar o rebase com:

git rebase --continue

Verificando o Resultado

Após concluir o rebase, você pode verificar o histórico de commits novamente com git log:

git log --oneline

Você verá que os commits foram combinados em um único commit, com a mensagem que você definiu.

Quando Não Usar o Rebase

Embora o rebase seja uma ferramenta poderosa, há casos em que ele não deve ser usado:

  • Não reescreva o histórico de commits que já foi compartilhado com outros desenvolvedores, pois isso pode causar problemas ao sincronizar branches.
  • Evite usar rebase interativo para combinar commits em projetos onde a clareza do histórico individual é mais importante do que a compactação de commits.

Usando git merge --squash como Alternativa

Outra abordagem para combinar commits é usar o comando git merge com a opção --squash. Este método é particularmente útil ao integrar mudanças de um branch de feature em outro branch principal.

O comando seria algo assim:

git merge --squash feature-branch

Após executar o comando acima, você pode criar um único commit contendo todas as alterações do branch especificado.

Conclusão

Combinar commits no Git é uma técnica útil para manter o histórico do repositório organizado e fácil de entender. Usando o rebase interativo ou a opção --squash do merge, você pode simplificar seu histórico e melhorar a legibilidade do código. Lembre-se de usar essas ferramentas com cuidado, especialmente em branches compartilhados.

Com essas dicas, você estará mais preparado para lidar com o gerenciamento de histórico no Git e manter seus projetos limpos e bem organizados.