3 Git Branchingandmergin 150928235608 Lva1 App6892
3 Git Branchingandmergin 150928235608 Lva1 App6892
br
commit a9ae
tree f4b3
parent
commit 7f64
master tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
commit b274
master tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
git branch feature1
git branch
commit b274
master tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
commit b274
master tree 15eb feature1
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
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 b274
master tree 15eb feature1
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
commit b274
HEAD master tree 15eb feature1
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
git checkout feature1
cat .git/HEAD
commit b274
HEAD master tree 15eb feature1
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
commit b274
master tree 15eb feature1 HEAD
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
Criando um commit no branch...
echo d > d.txt
git add -A
git commit -m "d.txt"
commit a42c
tree ad86 feature1 HEAD
parent b274
commit b274
master tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
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 a42c
tree ad86 feature1 HEAD
parent b274
commit b274
master tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
commit a42c
tree ad86 feature1
parent b274
commit b274
HEAD master tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
Realizando um merge no
master...
git merge feature1
commit a42c
tree ad86 feature1
parent b274
commit b274
HEAD master tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
commit a42c
HEAD master tree ad86 feature1
parent b274
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
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 a42c
HEAD master tree ad86 feature1
parent b274
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
commit a42c
HEAD master tree ad86
parent b274
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
Criando uma divergência entre o
master e o branch...
git branch feature2
git checkout feature2
ou
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
commit a42c
master tree ad86 feature2 HEAD
parent b274
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
echo e > e.txt
git add -A
git commit -m "e.txt"
git log --oneline --decorate --all
commit a42c
master tree ad86 feature2 HEAD
parent b274
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a9ae
tree f4b3
parent
commit a42c
master tree ad86 feature2 HEAD
parent b274
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit fde2
tree a025 feature2 HEAD
parent a42c
commit a42c
master tree ad86
parent b274
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
git checkout master
commit fde2
tree a025 feature2 HEAD
parent a42c
commit a42c
master tree ad86
parent b274
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit fde2
tree a025 feature2
parent a42c
commit a42c
HEAD master tree ad86
parent b274
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit a42c commit fde2
HEAD master tree ad86 tree a025 feature2
parent b274 parent a42c
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
echo f > f.txt
git add -A
git commit -m "f.txt"
commit a42c commit fde2
HEAD master tree ad86 tree a025 feature2
parent b274 parent a42c
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit d67a
HEAD master tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
git log --oneline --decorate --all
git log --oneline --decorate --all --graph
Realizando um merge...
git merge feature2
commit d67a
HEAD master tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit 372d
tree d11b
parent a9ae
commit d67a
HEAD master tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit cc8a
tree 10e6
HEAD master parent d67a
parent fde2
commit d67a
tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
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 cc8a
tree 10e6
HEAD master parent d67a
parent fde2
commit d67a
tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit cc8a
tree 10e6
HEAD master parent d67a
parent fde2
commit d67a
tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
E se der conflito?
git checkout -b feature3
commit cc8a
tree 10e6
HEAD master parent d67a
parent fde2
commit d67a
tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
commit cc8a
tree 10e6
master parent d67a feature3 HEAD
parent fde2
commit d67a
tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
commit 7f64
tree 6300
parent 372d
echo g2 > g.txt
git add -A
git commit -m "g.txt"
commit cc8a
tree 10e6
master parent d67a feature3 HEAD
parent fde2
commit d67a
tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
commit c5b5
tree 82b4 feature3 HEAD
parent cc8a
commit cc8a
tree 10e6
master parent d67a
parent fde2
commit d67a
tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
git log --oneline --decorate --all --graph
git checkout master
commit c5b5
tree 82b4 feature3 HEAD
parent cc8a
commit cc8a
tree 10e6
master parent d67a
parent fde2
commit d67a
tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
commit c5b5
tree 82b4 feature3
parent cc8a
commit cc8a
tree 10e6
HEAD master parent d67a
parent fde2
commit d67a
tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
echo g1 > g.txt
git add -A
git commit -m "g.txt"
commit c5b5
tree 82b4 feature3
parent cc8a
commit cc8a
tree 10e6
HEAD master parent d67a
parent fde2
commit d67a
tree 10e6
parent a42c
commit b274
tree 15eb
parent 7f64
commit cc8a
commit c5b5
tree 10e6
HEAD master parent d67a
tree 82b4 feature3
parent cc8a
parent fde2
commit d67a
tree 10e6
parent a42c
commit cc8a
commit c5b5
tree 10e6
parent d67a
tree 82b4 feature3
parent cc8a
parent fde2
commit d67a
tree 10e6
parent a42c
commit cc8a
commit c5b5
tree 10e6
parent d67a
tree 82b4 feature3
parent cc8a
parent fde2
commit d67a
tree 10e6
parent a42c
commit c85e
tree a1bb
parent cc8a
commit cc8a
commit c5b5
tree 10e6
parent d67a
tree 82b4 feature3
parent cc8a
parent fde2
commit d67a
tree 10e6
parent a42c
commit c85e
tree a1bb
parent cc8a
commit cc8a
commit c5b5
tree 10e6
parent d67a
tree 82b4 feature3
parent cc8a
parent fde2
commit d67a
tree 10e6
parent a42c
commit c85e
tree a1bb
parent cc8a
commit cc8a
commit c5b5
tree 10e6
tree 82b4
parent d67a
parent cc8a
parent fde2
commit d67a
tree 10e6
parent a42c