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 emaster
aprende nada - Se
sasuke
não aprende nada emaster
aprende que uva vale 1 - Se
sasuke
aprende que uva vale 2 emaster
aprende que pera vale 3 - Se
sasuke
aprende que uva vale 2 emaster
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 conflitomerge
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ãomaster
pode ser usado para criar outrosbranchs
, ou seja, outras ramificações. - Quando ocorrer qualquer
merge
, osbranch
s 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