Branching e Merging:Basico - UnbDroid/AprendendoGithub GitHub Wiki

Agora vamos entender o que é um Branch. Branchs são como se fossem ramificassões de uma arvore: existe o ramo principal e os galhos secundários.

Ou melhor, um branch é como um Clone das Sombras do Naruto:

  • Cada Naruto é um branch
  • Cada modificação nas informações significa um commit

Quando o Naruto faz um Clone das sombras, o verdadeiro e o clone das sombras possuem as mesmas informações: Ocorre uma ramificação e um novo branch é criado.

Vamos chamar esse clone das sombras de sasuke, apenas o nome, porque ainda é um Clone das sombras do naruto. Então temos o branch master que é o Naruto original. E temos o branch sasuke.

Então suponha que sasuke vá para longe do master(lembra do treinamento do Rasen-shuriken?). Quando sasuke aprende que uva vale 2, no sasuke essa informação é registrada, mas no master essa informação não existe. Ou seja, cada branch se comporta independentemente, aprende coisas e podemos fazer commits.

Agora, quando o Clone das sombras desaparece, o sasuke é desfeito. Nesse momento ocorre um merge e a informação que sasuke aprendeu vai para master.

Contudo, existem possibilidades:

  • Se sasuke aprende que uva vale 2 e master aprende nada
  • Se sasuke não aprende nada e master aprende que uva vale 1
  • Se sasuke aprende que uva vale 2 e master aprende que pera vale 3
  • Se sasuke aprende que uva vale 2 e master aprende que uva vale 1

Esses 4 casos são possiveis e representa quase totalmente os nossos casos. Por consequência desses 4 casos, alguns problemas ocorrem. Esses 4 casos representam respectivamente:

  • merge ocorre sem conflito
  • Criação de branch inutil
  • merge ocorre sem conflito
  • merge conflituoso

No quarto caso temos conflito de informações. Naruto não é muito inteligente por sinal e não consegue distinguir qual a informação que deve armazenar para si, e portanto precisa de alguém: kakashi(nós). O kakashi ao ver esse problema, tem que resolver e dizer qual está certo: a uva valer 1 ou 2.

Basicamente é isso que ocorre, e utilizaremos esses conceitos para utilizar os branchs e merges. Daremos um tratamento especial aos merges conflituosos e usaremos as ferramentas de diferenciação(Diff tools) para resolver isso.

Algumas diferenças com os Clones das Sombas que devemos dizer é:

  • Um branch não master pode ser usado para criar outros branchs, ou seja, outras ramificações.
  • Quando ocorrer qualquer merge, os branchs não somem, é simplesmente feito uma sincronização entre eles.

Um merge sempre ocorre com somente 2 branches e sempre quando ocorre um merge, um commit é dado indicando as alterações. Uma boa maneira de visualizar os branches é utilizando o esquema de arvores, que utilizaremos muito:

Comandos basicos

Atenção: Faça a mudança entre branches somente quando seu espaço de trabalho(workspace) está limpo caso não tenha experiência.

Para criar um novo branch, digitamos:

git branch sasuke

O comando para mudar de branch é:

git checkout sasuke

Para verificar qual branch está selecionado:

git branch -a

Para renomear um branch:

git branch -m sasuke sakura 

Para deletar um branch

git branch -d sakura

Um comando para fazer a criação e mudança para o novo branch é:

git checkout -b sasuke

Creditos

Primeira imagem