11.1 Branches no Git
Trabalhar com branches no Git é um dos aspectos chave do gerenciamento de versão, permitindo que você desenvolva várias linhas de desenvolvimento paralelas em um repositório. O branching torna o Git uma ferramenta poderosa para colaboração, experimentação e gerenciamento de diferentes versões de um projeto.
Você pode pensar nos branches no git como pastas onde o git copia seu projeto. Você tem a pasta principal do seu projeto no seu repositório local — master, e o git pode criar cópias dessa pasta para que você possa experimentar algo nelas sem quebrar o código principal que está funcionando bem. Essas pastas-cópias são chamadas de branches.
Branches são alternativas do código. Suponha que você queira redesenhar algo em um grande projeto ou fazer um experimento que você não tem certeza se dará certo. Como você faria isso sem o git?
Você poderia copiar o projeto para uma nova pasta e tentar mudar tudo lá. Se o resultado lhe agradar, você poderia copiar para a pasta principal. Se não gostar, pode esquecê-la, ou até deletá-la.
Ou vamos pegar um exemplo do dia a dia. Digamos que você esteja escrevendo um livro:
- Você tem o manuscrito do livro (branch principal).
- Você quer experimentar mudar o final (criando um novo branch).
- Você escreve o novo final em um documento separado (trabalhando no novo branch).
- Se o novo final for melhor, você substitui o antigo no manuscrito (merge dos branches).
- Elimina o documento separado com o novo final (deletando o branch).
11.2 Criando branches
Criar um branch no IntelliJ IDEA é muito fácil:
Digite o nome do branch:
O IntelliJ IDEA irá imediatamente exibir o nome do seu current branch no topo do menu:
E o que estava lá antes?
Lá estava o nome do seu primeiro e principal branch — master.
Agora, aparece test, o que significa que o Git (sob a orientação do IntelliJ IDEA) não apenas criou um novo branch, mas também já mudou para ele.
Vamos adicionar algum código ao arquivo main.html no branch atual (test) e fazer o commit:
11.3 Alternando entre branches
Passo 1. Escolhendo um branch.
Agora, vamos mudar para o nosso branch antigo. Clique no menu superior, e o que você vê?
Não se assuste — é tudo simples:
Local — é a lista de branches do seu repositório git local. Aqui temos dois:
- test
- master
Remote — é o seu repositório remoto, que está no servidor GitHub. Nele só enviamos suas alterações, mas o novo branch não está lá, o que é lógico. O repositório remoto tem o nome origin, e nele há apenas o branch master.
Recent — é apenas uma lista dos nomes dos últimos branches em que você trabalhou: este item o IntelliJ IDEA adiciona para conveniência e rapidez.
O nome origin/master à direita do nome do repositório local — é o nome do repositório remoto com o qual ele está sincronizado, e para onde as alterações serão enviadas.
Passo 2. Carregando o código do branch na pasta atual.
Passo 3. Verificando.
Aparece para mim o branch "master" e o antigo código:
11.4 Mesclagem de branches
Agora vamos tentar combinar o código dos nossos dois branches.
Passo 1. Primeiro, vamos adicionar ao nosso projeto outro arquivo — index.html e escrever algum código nele:
- Criando o arquivo index.html
- Escrevendo nele o código <h1>Hello</h1>
- Comitando o arquivo
Veja como meus dois arquivos aparecem no branch master:
Passo 2. Mesclando branches.
Vamos mesclar no nosso current branch (master) as alterações que foram feitas no branch test.
Para isso, também usamos o menu superior e o comando "Merge ‘test’ into ‘master’":
Passo 3. Verificando o resultado.
Verificamos:
- Ainda mostra o branch master no topo
- Temos 2 arquivos: index.html e main.html
- O arquivo main.html contém o código que foi adicionado no branch test
11.5 Conflitos na mesclagem
Às vezes, ao mesclar branches, surgem conflitos.
Se você fizer alterações em um mesmo arquivo em diferentes branches e tentar combiná-los, pode ocorrer um conflito.
Conflito de arquivos de texto
Git — é um sistema muito inteligente — entende os tipos de arquivos. Se você fizer alterações em diferentes locais dos arquivos que ele considera serem de texto, ele simplesmente transferirá as alterações de um arquivo para o outro no lugar certo (assim como um humano faria).
Conflito de arquivos binários
Mas se você editar alguma imagem ou documento, o Git não tentará combinar suas partes em um só: ele simplesmente perguntará qual versão do arquivo você quer manter no atual branch.
Resolução manual de conflitos
Se você fizer alterações no mesmo lugar em um arquivo de texto, o Git não conseguirá combinar corretamente as diferentes versões e pedirá que você faça isso:
Veja como isso pode parecer:
O que você vê aqui:
- À esquerda — conteúdo do arquivo main.html do branch master
- À direita — conteúdo do arquivo main.html do branch test
- No meio, o IntelliJ IDEA sugere que você escreva a versão final do código (você pode clicar nos botões ">>" e "<<", para automaticamente inserir alterações de algum arquivo)
Eu aceitei a versão mater e adicionei o código manualmente. Veja o que consegui:
11.6 Histórico de mudanças
Mais uma coisa útil e interessante. Você pode ver o histórico de mudanças de qualquer arquivo, clicando no botão Show History. Existem dois lugares onde ele pode estar. Encontre-o.
Veja como está o histórico de mudanças para mim no arquivo main.html:
Explicações:
- À esquerda, você vê o histórico de mudanças de um arquivo específico:
- Quanto mais novo a mudança, mais alto, quanto mais velho – mais baixo
- Também mostra o histórico de merges de branches
- À direita — as mudanças que foram feitas em um commit específico
GO TO FULL VERSION