Como combinar seus últimos N commits do Git

Como combinar seus últimos N commits do Git
Como combinar seus últimos N commits do Git

Dominando o Commit Squashing no Git:

Ao trabalhar em um projeto, seu histórico de commits pode ficar confuso com vários pequenos commits. Esses compromissos menores podem dificultar a revisão das alterações e a compreensão do histórico do projeto.

No Git, você pode compactar seus últimos N commits em um único commit, criando um histórico mais limpo e gerenciável. Este guia orientará você nas etapas para conseguir isso, tornando seu controle de versão mais eficiente.

Comando Descrição
git rebase -i HEAD~N Inicia uma rebase interativa dos últimos N commits.
pick Mantém um commit como está durante um rebase interativo.
squash Combina um commit com o anterior durante um rebase interativo.
sed -i '1!s/pick/squash/' .git/rebase-merge/git-rebase-todo Substitui automaticamente 'pick' por 'squash' para todos, exceto o primeiro commit na lista de tarefas de rebase.
git rebase --continue Continua o processo de rebase após a resolução de conflitos.
git rebase --abort Anula o processo de rebase e retorna ao estado anterior ao início do rebase.
HEAD~N Refere-se ao commit N colocado antes do HEAD atual.

Compreendendo o esmagamento de commits do Git

O primeiro script usa git rebase -i HEAD~N para iniciar um rebase interativo dos últimos N commits. Na tela interativa, você substitui 'pick' por 'squash' nos commits que deseja combinar. Esse processo ajuda a consolidar vários commits menores em um, tornando seu histórico de commits mais limpo e fácil de gerenciar. Após a edição, salve e feche o editor. Se houver conflitos, você os resolve e continua com git rebase --continue.

O segundo script é um script Bash que automatiza o processo de compressão. Começa verificando se um número de commits (N) é fornecido. Então, ele corre git rebase -i HEAD~N e usa sed para substituir 'pick' por 'squash' para todos, exceto o primeiro commit na lista de tarefas de rebase. Isso torna mais fácil eliminar vários commits sem editar manualmente o arquivo. Finalmente, ele continua o processo de rebase com git rebase --continue, lidando automaticamente com quaisquer resoluções de conflitos necessárias.

Esmague vários commits em um usando Git Rebase

Comandos Git

git rebase -i HEAD~N
# Replace N with the number of commits you want to squash
# In the interactive rebase screen that appears, change 'pick' to 'squash' (or 's') for the commits you want to squash
# Save and close the editor
# Edit the commit message if needed, then save and close the editor again
# If there are conflicts, resolve them and then run
git rebase --continue
# Your last N commits are now squashed into one commit

Automatizando o Commit Squashing com um Shell Script

Script Bash

#!/bin/bash
if [ -z "$1" ]
then
  echo "Usage: ./squash_commits.sh <N>"
  exit 1
fi
git rebase -i HEAD~$1
# Automatically replace 'pick' with 'squash' for all but the first commit
sed -i '1!s/pick/squash/' .git/rebase-merge/git-rebase-todo
git rebase --continue

Técnicas Avançadas de Git Squashing

Outro aspecto importante da eliminação de commits no Git é lidar com conflitos de mesclagem que podem surgir durante o processo. Ao combinar vários commits, as alterações de diferentes commits podem entrar em conflito entre si. Para resolver esses conflitos, o Git fornece comandos como git status para ver quais arquivos estão em conflito e git add para marcá-los como resolvidos. Depois de resolver os conflitos, você continua o rebase com git rebase --continue.

Também é útil saber como abortar um rebase se algo der errado. O comando git rebase --abort interrompe o processo de rebase e retorna seu repositório ao estado anterior antes do início do rebase. Isso garante que você possa desfazer com segurança quaisquer alterações feitas durante o processo de rebase. Compreender esses comandos pode melhorar significativamente sua capacidade de gerenciar históricos complexos do Git com eficiência.

Perguntas frequentes sobre o esmagamento de commit do Git

  1. O que significa esmagar commits?
  2. Esmagar commits significa combinar vários commits em um único commit para simplificar o histórico de commits.
  3. Por que devo esmagar commits?
  4. Esmagar commits pode tornar o histórico do seu projeto mais limpo e fácil de ler, especialmente quando muitos commits pequenos são usados.
  5. Como inicio um rebase interativo?
  6. Use o comando git rebase -i HEAD~N, substituindo N pelo número de commits que você deseja esmagar.
  7. O que significam 'pick' e 'squash' no rebase interativo?
  8. 'Pick' mantém um commit como está, enquanto 'squash' o combina com o commit anterior.
  9. Como resolvo conflitos durante um rebase?
  10. Usar git status para identificar conflitos, resolvê-los manualmente e, em seguida, usar git add e git rebase --continue.
  11. Posso abortar um rebase se algo der errado?
  12. Sim, você pode usar git rebase --abort para interromper o rebase e retornar ao estado anterior.
  13. Qual é a vantagem de usar um script Bash para esmagar commits?
  14. Um script Bash automatiza o processo, economizando tempo e reduzindo o risco de erros manuais.
  15. Existe uma maneira de esmagar automaticamente os commits em um rebase?
  16. Sim, usando um script para modificar a lista de tarefas do rebase com sed, você pode alterar automaticamente 'pick' para 'squash'.

Concluindo o esmagamento de commit do Git

Esmagar commits no Git é uma técnica poderosa para manter um histórico de projeto limpo e legível. Seja usando rebase interativo ou automatizando com um script Bash, você pode combinar vários commits em um único, facilitando o gerenciamento do log. Compreender como resolver conflitos e abortar um rebase aumenta sua proficiência em Git, garantindo que você possa lidar com quaisquer problemas que surgirem. Dominar esses comandos e métodos melhorará significativamente suas práticas de controle de versão.