#3 - git - branching e merging

149
Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br #3 - Git - Branching e Merging

Upload: rodrigo-branas

Post on 11-Apr-2017

620 views

Category:

Software


0 download

TRANSCRIPT

Page 1: #3 - Git - Branching e Merging

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

#3 - Git - Branching e Merging

Page 2: #3 - Git - Branching e Merging

Rodrigo [email protected]

http://www.agilecode.com.br

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

Page 3: #3 - Git - Branching e Merging

http://www.youtube.com/rodrigobranas

Page 4: #3 - Git - Branching e Merging

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

Page 5: #3 - Git - Branching e Merging

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

mantendo a linha base estável.

Page 6: #3 - Git - Branching e Merging

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

Page 7: #3 - Git - Branching e Merging

Os commits podem continuar contando a história do projeto

Page 8: #3 - Git - Branching e Merging

O branch pode ser sincronizado e compartilhado, evitando perdas

Page 9: #3 - Git - Branching e Merging

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

Page 10: #3 - Git - Branching e Merging

git branch

Page 11: #3 - Git - Branching e Merging
Page 12: #3 - Git - Branching e Merging

commit a9ae tree f4b3 parent

master

Page 13: #3 - Git - Branching e Merging

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

master

Page 14: #3 - Git - Branching e Merging

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

master

Page 15: #3 - Git - Branching e Merging

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

Page 16: #3 - Git - Branching e Merging

git branch feature1

Page 17: #3 - Git - Branching e Merging
Page 18: #3 - Git - Branching e Merging

git branch

Page 19: #3 - Git - Branching e Merging
Page 20: #3 - Git - Branching e Merging

commit a9ae tree f4b3 parent

commit 372d tree d11b parent a9ae

commit 7f64 tree 6300 parent 372d

commit b274 tree 15eb parent 7f64

master

Page 21: #3 - Git - Branching e Merging

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

Page 22: #3 - Git - Branching e Merging

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

Page 23: #3 - Git - Branching e Merging

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

Page 24: #3 - Git - Branching e Merging
Page 25: #3 - Git - Branching e Merging

git log --oneline --decorate

Page 26: #3 - Git - Branching e Merging
Page 27: #3 - Git - Branching e Merging

HEAD?

Page 28: #3 - Git - Branching e Merging

cat .git/HEAD

Page 29: #3 - Git - Branching e Merging
Page 30: #3 - Git - Branching e Merging

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

Page 31: #3 - Git - Branching e Merging

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

Page 32: #3 - Git - Branching e Merging

git checkout feature1

Page 33: #3 - Git - Branching e Merging
Page 34: #3 - Git - Branching e Merging

cat .git/HEAD

Page 35: #3 - Git - Branching e Merging
Page 36: #3 - Git - Branching e Merging

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

Page 37: #3 - Git - Branching e Merging

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

Page 38: #3 - Git - Branching e Merging

Criando um commit no branch...

Page 39: #3 - Git - Branching e Merging

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

Page 40: #3 - Git - Branching e Merging
Page 41: #3 - Git - Branching e Merging

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

Page 42: #3 - Git - Branching e Merging

git log --oneline --decorate

Page 43: #3 - Git - Branching e Merging
Page 44: #3 - Git - Branching e Merging

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

Page 45: #3 - Git - Branching e Merging

git checkout master ls -la

Page 46: #3 - Git - Branching e Merging
Page 47: #3 - Git - Branching e Merging

git log --oneline --decorate

Page 48: #3 - Git - Branching e Merging
Page 49: #3 - Git - Branching e Merging

git log --oneline --decorate --all

Page 50: #3 - Git - Branching e Merging
Page 51: #3 - Git - Branching e Merging

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

Page 52: #3 - Git - Branching e Merging

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

Page 53: #3 - Git - Branching e Merging

Realizando um merge no master...

Page 54: #3 - Git - Branching e Merging

git merge feature1

Page 55: #3 - Git - Branching e Merging
Page 56: #3 - Git - Branching e Merging

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

Page 57: #3 - Git - Branching e Merging

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

Page 58: #3 - Git - Branching e Merging

Fast-Forward

Page 59: #3 - Git - Branching e Merging

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.

Page 60: #3 - Git - Branching e Merging

git log --oneline --decorate --all

Page 61: #3 - Git - Branching e Merging
Page 62: #3 - Git - Branching e Merging

git branch -d feature1

Page 63: #3 - Git - Branching e Merging
Page 64: #3 - Git - Branching e Merging

git log --oneline --decorate --all

Page 65: #3 - Git - Branching e Merging
Page 66: #3 - Git - Branching e Merging

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

Page 67: #3 - Git - Branching e Merging

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

Page 68: #3 - Git - Branching e Merging

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

Page 69: #3 - Git - Branching e Merging

git branch feature2 git checkout feature2

ou

git checkout -b feature2

Page 70: #3 - Git - Branching e Merging
Page 71: #3 - Git - Branching e Merging

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

Page 72: #3 - Git - Branching e Merging

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

Page 73: #3 - Git - Branching e Merging

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

Page 74: #3 - Git - Branching e Merging
Page 75: #3 - Git - Branching e Merging

git log --oneline --decorate --all

Page 76: #3 - Git - Branching e Merging
Page 77: #3 - Git - Branching e Merging

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

Page 78: #3 - Git - Branching e Merging

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

Page 79: #3 - Git - Branching e Merging

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

Page 80: #3 - Git - Branching e Merging

git checkout master

Page 81: #3 - Git - Branching e Merging
Page 82: #3 - Git - Branching e Merging

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

Page 83: #3 - Git - Branching e Merging

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

Page 84: #3 - Git - Branching e Merging

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

Page 85: #3 - Git - Branching e Merging

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

Page 86: #3 - Git - Branching e Merging
Page 87: #3 - Git - Branching e Merging

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

Page 88: #3 - Git - Branching e Merging

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

Page 89: #3 - Git - Branching e Merging

git log --oneline --decorate --all

Page 90: #3 - Git - Branching e Merging
Page 91: #3 - Git - Branching e Merging

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

Page 92: #3 - Git - Branching e Merging
Page 93: #3 - Git - Branching e Merging

Realizando um merge...

Page 94: #3 - Git - Branching e Merging

git merge feature2

Page 95: #3 - Git - Branching e Merging
Page 96: #3 - Git - Branching e Merging
Page 97: #3 - Git - Branching e Merging
Page 98: #3 - Git - Branching e Merging

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

Page 99: #3 - Git - Branching e Merging

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

Page 100: #3 - Git - Branching e Merging

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

Page 101: #3 - Git - Branching e Merging

Recursive

Page 102: #3 - Git - Branching e Merging

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

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

Page 103: #3 - Git - Branching e Merging

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

Page 104: #3 - Git - Branching e Merging
Page 105: #3 - Git - Branching e Merging

git branch -d feature2

Page 106: #3 - Git - Branching e Merging
Page 107: #3 - Git - Branching e Merging

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

Page 108: #3 - Git - Branching e Merging

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

Page 109: #3 - Git - Branching e Merging

E se der conflito?

Page 110: #3 - Git - Branching e Merging

git checkout -b feature3

Page 111: #3 - Git - Branching e Merging
Page 112: #3 - Git - Branching e Merging

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

Page 113: #3 - Git - Branching e Merging

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

Page 114: #3 - Git - Branching e Merging

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

Page 115: #3 - Git - Branching e Merging
Page 116: #3 - Git - Branching e Merging

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

Page 117: #3 - Git - Branching e Merging

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

Page 118: #3 - Git - Branching e Merging

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

Page 119: #3 - Git - Branching e Merging
Page 120: #3 - Git - Branching e Merging

git checkout master

Page 121: #3 - Git - Branching e Merging
Page 122: #3 - Git - Branching e Merging

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

Page 123: #3 - Git - Branching e Merging

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

Page 124: #3 - Git - Branching e Merging

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

Page 125: #3 - Git - Branching e Merging
Page 126: #3 - Git - Branching e Merging

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

Page 127: #3 - Git - Branching e Merging

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

Page 128: #3 - Git - Branching e Merging

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

Page 129: #3 - Git - Branching e Merging

git merge feature3

Page 130: #3 - Git - Branching e Merging
Page 131: #3 - Git - Branching e Merging

git status

Page 132: #3 - Git - Branching e Merging
Page 133: #3 - Git - Branching e Merging

git diff

Page 134: #3 - Git - Branching e Merging
Page 135: #3 - Git - Branching e Merging

vi g.txt

Page 136: #3 - Git - Branching e Merging
Page 137: #3 - Git - Branching e Merging
Page 138: #3 - Git - Branching e Merging
Page 139: #3 - Git - Branching e Merging

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

Page 140: #3 - Git - Branching e Merging
Page 141: #3 - Git - Branching e Merging

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

Page 142: #3 - Git - Branching e Merging

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

Page 143: #3 - Git - Branching e Merging

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

Page 144: #3 - Git - Branching e Merging
Page 145: #3 - Git - Branching e Merging

git branch -d feature3

Page 146: #3 - Git - Branching e Merging
Page 147: #3 - Git - Branching e Merging

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

Page 148: #3 - Git - Branching e Merging

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

Page 149: #3 - Git - Branching e Merging

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