Chapters ▾ 2nd Edition

A3.4 Appendix C: Comandos do Git - Branches e Merges

Branches e Merges

Poucos comandos implementam a maior parte das funcionalidades de branch e merge do Git.

git branch

O comando git branch funciona, na verdade, como uma ferramenta de gerenciamento de branches. Ele pode listar seus branches, criar um novo branch, excluir branches e renomeá-los.

A maior parte de Ramificação (Branching) no Git é dedicada ao comando branch, que é usado ao longo de todo o capítulo. Nós o apresentamos pela primeira vez em Criando um Novo Branch e examinamos a maioria de seus outros recursos (listagem e exclusão) em Gerenciamento de Branches.

Em Branches de Rastreamento (Tracking Branches), usamos a opção git branch -u para configurar um branch de rastreamento.

Por fim, em Referências do Git, examinamos parte do que ele faz em segundo plano.

git checkout

O comando git checkout é usado para alternar entre branches e fazer checkout de conteúdo no diretório de trabalho.

Encontramos o comando pela primeira vez em Mudando de Branches, junto com o comando git branch.

Em Branches de Rastreamento (Tracking Branches), vemos como usá-lo para começar a rastrear branches com a flag --track.

Em Fazendo Checkout de Conflitos, nós o usamos com --conflict=diff3 para reintroduzir conflitos em arquivos.

Em Reset Desmistificado, examinamos mais detalhadamente sua relação com git reset.

Por fim, em A HEAD, abordamos alguns detalhes de implementação.

git merge

A ferramenta git merge é usada para mesclar um ou mais branches no branch em que você fez checkout. Em seguida, ela avança o branch atual até o resultado do merge.

O comando git merge foi apresentado pela primeira vez em Ramificação Básica. Embora seja usado em vários pontos do livro, há poucas variações do comando merge — em geral, apenas git merge <branch> com o nome do único branch que você quer mesclar.

No final de Projeto Público Bifurcado (Forked), abordamos como fazer um merge squash (no qual o Git mescla o trabalho, mas o trata como um único novo commit, sem registrar o histórico do branch que está sendo mesclado).

Em Merging Avançado, examinamos muitos aspectos do processo e do comando de merge, incluindo o comando -Xignore-space-change e a flag --abort para abortar um merge problemático.

Em Assinando Commits, aprendemos a verificar assinaturas antes do merge quando o projeto usa assinaturas GPG.

Por fim, em Merging de Sub-árvore (Subtree Merging), aprendemos sobre merges de subárvores.

git mergetool

O comando git mergetool simplesmente inicia um auxiliar externo de merge caso você tenha problemas com um merge no Git.

Nós o mencionamos rapidamente em Conflitos Básicos de Mesclagem (Merge Conflicts) e detalhamos como implementar sua própria ferramenta externa de merge em Ferramentas Externas de Merge e Diff.

git log

O comando git log é usado para mostrar o histórico registrado e alcançável de um projeto, retrocedendo a partir do snapshot do commit mais recente. Por padrão, ele mostra apenas o histórico do branch atual, mas você pode fornecer heads ou branches diferentes, inclusive vários deles, como pontos de partida para percorrer o histórico. Ele também é usado com frequência para mostrar diferenças entre dois ou mais branches no nível dos commits.

Esse comando é usado em quase todos os capítulos do livro para demonstrar o histórico de um projeto.

Apresentamos o comando e o abordamos com alguma profundidade em Visualizando o Histórico de Commits. Ali examinamos as opções -p e --stat para ter uma ideia do que foi introduzido em cada commit e as opções --pretty e --oneline para visualizar o histórico de forma mais concisa, além de algumas opções simples de filtragem por data e autor.

Em Criando um Novo Branch, nós o usamos com a opção --decorate para visualizar facilmente a localização dos ponteiros dos branches e também com a opção --graph para ver como são históricos divergentes.

Em Equipe Pequena Privada e Intervalos (Ranges) de Commits, abordamos a sintaxe branchA..branchB para usar o comando git log e ver quais commits são exclusivos de um branch em relação a outro. Em Intervalos (Ranges) de Commits, examinamos isso em bastante detalhe.

Em Log de Merge (Merge Log) e Ponto Triplo (Triple Dot), abordamos o uso do formato branchA…​branchB e da sintaxe --left-right para ver o que está em um branch ou no outro, mas não em ambos. Em Log de Merge (Merge Log), também vemos como usar a opção --merge para ajudar a depurar conflitos de merge, bem como a opção --cc para examinar conflitos de commits de merge no histórico.

Em Nomes Curtos do RefLog, usamos a opção -g para visualizar o reflog do Git por meio dessa ferramenta, em vez de percorrer branches.

Em Pesquisando (Searching), examinamos o uso das opções -S e -L para realizar buscas bastante sofisticadas por algo que ocorreu no histórico do código, como visualizar o histórico de uma função.

Em Assinando Commits, vemos como usar --show-signature para adicionar uma informação de validação a cada commit na saída de git log, conforme ele tenha ou não uma assinatura válida.

git stash

O comando git stash é usado para armazenar temporariamente trabalho não commitado, permitindo limpar o diretório de trabalho sem precisar fazer commit de trabalho inacabado em um branch.

Isso é abordado praticamente por completo em Fazendo Stash e Limpando.

git tag

O comando git tag é usado para criar um marcador permanente em um ponto específico do histórico do código. Em geral, isso é usado para itens como releases.

Esse comando é apresentado e abordado em detalhes em Criando Tags, e nós o usamos na prática em Adicionando Tags aos Seus Lançamentos.

Em Assinando Seu Trabalho, também abordamos como criar uma tag assinada com GPG usando a flag -s e como verificá-la com a flag -v.