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
sasukeaprende que uva vale 2 emasteraprende nada - Se
sasukenão aprende nada emasteraprende que uva vale 1 - Se
sasukeaprende que uva vale 2 emasteraprende que pera vale 3 - Se
sasukeaprende que uva vale 2 emasteraprende 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:
mergeocorre sem conflito- Criação de
branchinutil mergeocorre sem conflitomergeconflituoso
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
branchnãomasterpode ser usado para criar outrosbranchs, ou seja, outras ramificações. - Quando ocorrer qualquer
merge, osbranchs 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