11.1 Branches no Git
Trabalhar com branches no Git é um dos aspectos chave da gestão de versões que permite executar várias linhas de desenvolvimento em paralelo num só repositório. A branch faz do Git uma ferramenta poderosa para colaboração, experimentação e gestão de diferentes versões de um projeto.
Você pode ver 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
. O Git pode criar cópias dessa pasta para que você possa experimentar sem correr o risco de mexer no código principal que já está funcionando bem. Tais pastas-cópias são chamadas de branches.
Branches são opções alternativas do código. Suponha que você queira mudar algo em um grande projeto ou realizar um experimento em que não está completamente seguro. Como você faria sem o Git?
Você poderia copiar o projeto para uma nova pasta e tentar mudar tudo nela. Se você gostar do resultado, pode copiar para a pasta principal. Se não gostar — pode esquecer a nova ou até mesmo deletar.
Vamos dar uma olhada em um exemplo prático, como escrever um livro:
- Você tem o manuscrito do livro (branch principal).
- Você decide tentar mudar o final (criação de uma nova branch).
- Você escreve o novo final em um documento separado (trabalho em uma nova branch).
- Se o novo final for melhor, substitui o antigo no manuscrito (merge das branches).
- Você apaga o documento com o novo final (remoção da branch).
11.2 Criando branches
Criar um branch no PyCharm é muito simples.
Digite o nome da branch.
O PyCharm imediatamente mostrará o nome do seu branch atual no menu superior:
O que havia antes?
Antes era exibido o nome do seu primeiro e principal branch —
master
.
Agora aparece test
, o que significa que o Git (sob a supervisão do
PyCharm) não só criou um novo branch, mas também já mudou para
ele.
Vamos adicionar algum código no arquivo main.py
do branch atual (test)
e comitar.
11.3 Alternando entre branches
Passo 1. Escolha um branch.
Agora vamos mudar para nosso branch antigo. Clique no menu superior, e o que vemos?
Não se confunda — é bem simples:
Local
— é a lista de branches do seu
repositório Git local; tem dois aqui:
test
master
Remote
— é o seu repositório remoto, que
está no servidor GitHub. Mandamos para lá suas mudanças, mas o novo
branch não está lá, o que faz sentido. O repositório remoto se chama origin,
e nele só tem o branch master
.
Recent
— é a lista de nomes dos últimos branches com
os quais você trabalhou. Esse item foi adicionado no PyCharm 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 agora e para onde as mudanças serão enviadas.
Passo 2. — Carregue o código do branch na pasta atual.
Passo 3. Verifique:.
Eu vejo o branch (master)
e o código antigo.
11.4 Fazendo merge de branches
Vamos agora tentar unir o código dos nossos dois branches.
Passo 1. Primeiro vamos adicionar ao nosso projeto mais um arquivo — init.py e colocar algum código nele.
- Crie o arquivo init.py
- Escreva nele o código print("Oi")
- Comite o arquivo.
Assim que meus dois arquivos parecem no branch master
:
Passo 2. Fazendo merge dos branches.
Vamos unir no nosso branch atual (master)
as mudanças que foram feitas
no branch test
.
Para isso também usaremos o menu superior e o comando «Merge ‘test’
into ‘master’»
.
Passo 3. Verifique o resultado:.
Verifique:
- O branch
master
ainda está sendo exibido no topo - Temos dois arquivos: init.py e main.py
-
O arquivo main.py contém o código que foi adicionado no branch
test
.
11.5 Conflitos de merge
Às vezes ocorrem conflitos ao fazer merge de branches.
Se você fizer alterações em um arquivo em diferentes branches e tentar uni-los, pode surgir um conflito.
Conflito de arquivos de texto
O Git é um sistema muito inteligente, ele entende tipos de arquivos. Se você fizer alterações em diferentes partes dos arquivos que ele considera como de texto, ele simplesmente transfere as alterações de um arquivo para o outro no lugar certo, como uma pessoa faria.
Conflito de arquivos binários
Mas se você modificar uma imagem ou documento, o Git não tentará combinar as partes em um único arquivo. Ele simplesmente irá perguntar qual versão do arquivo você deseja manter no branch atual.
Resolução manual de conflitos:
Se você fizer alterações no mesmo local de um arquivo de texto, o Git não será capaz de unir as diferentes versões corretamente e sugerirá que você faça isso.
Veja como isso pode parecer:
O que você vê aqui:
- À esquerda, o conteúdo do arquivo main.py do branch master
- À direita, o conteúdo do arquivo main.py do branch
test
-
No meio, o PyCharm sugere que você escreva a versão final do código
(pode-se clicar nos botões
«>>»
e«<<»
para inserir automaticamente as alterações de um dos arquivos).
Eu aceitei a opção master
e completei o código manualmente. Veja como ficou.
11.6 Histórico de mudanças
Outra coisa útil e interessante: você pode ver o histórico de
mudanças de qualquer arquivo clicando no botão Show
History
. Há dois lugares onde ele pode estar — encontre-o.
Veja como está o histórico de mudanças para o arquivo main.py:
Explicações:
-
À esquerda, você vê o histórico de mudanças do arquivo específico:
- Alterações mais recentes ficam no topo; mais antigas, embaixo.
- Também é exibido o histórico de merges de branches.
- À direita — alterações que foram feitas no commit específico.
GO TO FULL VERSION