#3 - git - branching e merging

Post on 11-Apr-2017

627 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br

#3 - Git - Branching e Merging

Rodrigo Branasrodrigo.branas@agilecode.com.br

http://www.agilecode.com.br

• Arquiteto de Software na Gennera • Professor na Agile Code • Autor na Java Magazine e PacktPub • Palestrante

http://www.youtube.com/rodrigobranas

O que é um branch e quais são as vantagens de utilizá-lo?

Um branch é uma nova linha de desenvolvimento que permite isolar o código de uma nova funcionalidade,

mantendo a linha base estável.

É possível trocar de branch facilmente, a qualquer momento

Os commits podem continuar contando a história do projeto

O branch pode ser sincronizado e compartilhado, evitando perdas

Depois de trabalhar no branch é necessário realizar um merge

git branch

commit a9ae tree f4b3 parent

master

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

master

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

master

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

git branch feature1

git branch

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature1

No Git, um branch é apenas uma referência para um commit.

cat .git/refs/heads/master cat .git/refs/heads/feature1

git log --oneline --decorate

HEAD?

cat .git/HEAD

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature1

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature1HEAD

git checkout feature1

cat .git/HEAD

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature1HEAD

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature1 HEAD

Criando um commit no branch...

echo d > d.txt git add -A git commit -m "d.txt"

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature1 HEADcommit a42c tree ad86 parent b274

git log --oneline --decorate

Trocando de branch, os arquivos são substituídos

git checkout master ls -la

git log --oneline --decorate

git log --oneline --decorate --all

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature1 HEADcommit a42c tree ad86 parent b274

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature1commit a42c tree ad86 parent b274

HEAD

Realizando um merge no master...

git merge feature1

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature1commit a42c tree ad86 parent b274

HEAD

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature1commit a42c tree ad86 parent b274

HEAD

Fast-Forward

A estratégia fast-forward é apenas uma atualização da referência e só é possível

quando não existe divergência entre os branches.

git log --oneline --decorate --all

git branch -d feature1

git log --oneline --decorate --all

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature1commit a42c tree ad86 parent b274

HEAD

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

mastercommit a42c tree ad86 parent b274

HEAD

Criando uma divergência entre o master e o branch...

git branch feature2 git checkout feature2

ou

git checkout -b feature2

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

mastercommit a42c tree ad86 parent b274

HEAD

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature2commit a42c tree ad86 parent b274

HEAD

echo e > e.txt git add -A git commit -m "e.txt"

git log --oneline --decorate --all

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature2commit a42c tree ad86 parent b274

HEAD

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature2commit a42c tree ad86 parent b274

HEAD

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature2

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

git checkout master

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature2

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature2

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature2commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

echo f > f.txt git add -A git commit -m "f.txt"

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master feature2commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature2commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEADcommit d67a tree 10e6 parent a42c

git log --oneline --decorate --all

git log --oneline --decorate --all --graph

Realizando um merge...

git merge feature2

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature2commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEADcommit d67a tree 10e6 parent a42c

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature2commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEADcommit d67a tree 10e6 parent a42c

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature2commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

Recursive

A estratégia recursive é utilizada quando existe divergência entre os

branches e um commit para unir ambos se torna necessário.

git log --oneline --decorate --all --graph

git branch -d feature2

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

feature2commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

E se der conflito?

git checkout -b feature3

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

feature3

echo g2 > g.txt git add -A git commit -m "g.txt"

commit b274 tree 15eb parent 7f64

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

feature3

commit b274 tree 15eb parent 7f64

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

feature3commit c5b5 tree 82b4 parent cc8a

git log --oneline --decorate --all --graph

git checkout master

commit b274 tree 15eb parent 7f64

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

HEAD

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

feature3commit c5b5 tree 82b4 parent cc8a

commit b274 tree 15eb parent 7f64

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

feature3commit c5b5 tree 82b4 parent cc8a

HEAD

echo g1 > g.txt git add -A git commit -m "g.txt"

commit b274 tree 15eb parent 7f64

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

feature3commit c5b5 tree 82b4 parent cc8a

HEAD

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

feature3commit c5b5 tree 82b4 parent cc8a

HEAD

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

feature3commit c5b5 tree 82b4 parent cc8a

HEADcommit c85e tree a1bb parent cc8a

git merge feature3

git status

git diff

vi g.txt

git add -A git commit -m "g.txt"

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

feature3commit c5b5 tree 82b4 parent cc8a

HEADcommit c85e tree a1bb parent cc8a

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

feature3commit c5b5 tree 82b4 parent cc8a

HEAD

commit c85e tree a1bb parent cc8a

commit 270e tree 82b4 parent c85e parent c5b5

git log --oneline --decorate --all --graph

git branch -d feature3

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

feature3commit c5b5 tree 82b4 parent cc8a

HEAD

commit c85e tree a1bb parent cc8a

commit 270e tree 82b4 parent c85e parent c5b5

master

commit a42c tree ad86 parent b274

commit fde2 tree a025 parent a42c

commit d67a tree 10e6 parent a42c

commit cc8a tree 10e6 parent d67a parent fde2

commit c5b5 tree 82b4 parent cc8a

HEAD

commit c85e tree a1bb parent cc8a

commit 270e tree 82b4 parent c85e parent c5b5

Rodrigo Branas

Site: http://www.agilecode.com.br Twitter: @rodrigobranas Facebook: http://www.facebook.com/canalrodrigobranas SlideShare: http://www.slideshare.com/rodrigobranas YouTube: http://www.youtube.com/rodrigobranas LinkedIn: http://br.linkedin.com/in/rodrigobranas +Plus: https://plus.google.com/+RodrigoBranas GitHub: http://www.github.com/rodrigobranas

top related