-
1. Primeiros Passos
- 1.1 Sobre Controle de Versão
- 1.2 Uma Breve História do Git
- 1.3 O que é Git?
- 1.4 A Linha de Comando
- 1.5 Instalando o Git
- 1.6 Configuração inicial do Git
- 1.7 Obtendo Ajuda
- 1.8 Resumo
-
2. Fundamentos do Git
-
3. Ramificação (Branching) no Git
-
4. Git no Servidor
- 4.1 Os Protocolos
- 4.2 Colocando o Git em um Servidor
- 4.3 Gerando a sua Chave Pública SSH
- 4.4 Configurando o Servidor
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Opções de Hospedagem de Terceiros
- 4.10 Resumo
-
5. Git Distribuído
-
6. GitHub
-
7. Ferramentas do Git
- 7.1 Seleção de Revisão
- 7.2 Área de Stage Interativa
- 7.3 Fazendo Stash e Limpando
- 7.4 Assinando Seu Trabalho
- 7.5 Pesquisando (Searching)
- 7.6 Reescrevendo o Histórico
- 7.7 Reset Desmistificado
- 7.8 Merging Avançado
- 7.9 Rerere
- 7.10 Depurando com Git
- 7.11 Submódulos
- 7.12 Empacotando (Bundling)
- 7.13 Substituir (Replace)
- 7.14 Armazenamento de Credenciais
- 7.15 Resumo
-
8. Customizando o Git
- 8.1 Configuração do Git
- 8.2 Atributos do Git
- 8.3 Hooks do Git
- 8.4 Uma Política de Exemplo Imposta pelo Git
- 8.5 Resumo
-
9. Git e Outros Sistemas
- 9.1 Git como Cliente
- 9.2 Migrando para o Git
- 9.3 Resumo
-
10. Git Internals (Por Dentro do Git)
- 10.1 Encanamento e Porcelana (Plumbing and Porcelain)
- 10.2 Objetos do Git
- 10.3 Referências do Git
- 10.4 Arquivos de pacote (Packfiles)
- 10.5 Refspec
- 10.6 Protocolos de Transferência
- 10.7 Manutenção e Recuperação de Dados
- 10.8 Variáveis de Ambiente
- 10.9 Resumo
-
A1. Appendix A: O Git em Outros Ambientes
- A1.1 Interfaces Gráficas
- A1.2 Git no Visual Studio
- A1.3 Git no Visual Studio Code
- A1.4 Git no IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git no Sublime Text
- A1.6 Git no Bash
- A1.7 Git no Zsh
- A1.8 Git no PowerShell
- A1.9 Resumo
-
A2. Appendix B: Incorporando o Git nos seus Aplicativos
- A2.1 Linha de Comando do Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Appendix C: Comandos do Git
- A3.1 Configuração e Ajustes
- A3.2 Obtendo e Criando Projetos
- A3.3 Snapshots Básicos
- A3.4 Branches e Merges
- A3.5 Compartilhando e Atualizando Projetos
- A3.6 Inspeção e Comparação
- A3.7 Depuração
- A3.8 Patches
- A3.9 E-mail
- A3.10 Sistemas Externos
- A3.11 Administração
- A3.12 Comandos de Encanamento
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.