git tricks

179
Git Tricks Arthur Zapparoli @arthurgeek

Upload: vagner-rodrigues

Post on 24-May-2015

878 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Git Tricks

Git TricksArthur Zapparoli

@arthurgeek

Page 2: Git Tricks

Tópicos

Page 3: Git Tricks

Ambiente

Page 4: Git Tricks

Ambiente

Configurações

Page 5: Git Tricks

Ambiente

Configurações

Comandos

Page 6: Git Tricks

Ambiente

Configurações

Comandos

Features

Page 7: Git Tricks

Ambiente

Page 8: Git Tricks

git-completion

Page 9: Git Tricks

# Copie o arquivo do source do Git

~$ cp $GIT_SOURCE/contrib/completion/git-completion.bash ~/.git-completion.sh

git-completion

Page 10: Git Tricks

# Copie o arquivo do source do Git

~$ cp $GIT_SOURCE/contrib/completion/git-completion.bash ~/.git-completion.sh

# Edite seu .bashrc

~$ vim ~/.bashrc

git-completion

Page 11: Git Tricks

# Copie o arquivo do source do Git

~$ cp $GIT_SOURCE/contrib/completion/git-completion.bash ~/.git-completion.sh

# Edite seu .bashrc

~$ vim ~/.bashrc

# Adicionando a seguinte linha

source ~/.git-completion.sh

git-completion

Page 12: Git Tricks

# Copie o arquivo do source do Git

~$ cp $GIT_SOURCE/contrib/completion/git-completion.bash ~/.git-completion.sh

# Edite seu .bashrc

~$ vim ~/.bashrc

# Adicionando a seguinte linha

source ~/.git-completion.sh

# Recarregue o ~/.bashrc

~$ source ~/.bashrc

git-completion

Page 13: Git Tricks

~$ git<tab><tab>

git-completion

Page 14: Git Tricks

~$ git<tab><tab>add citool gc notes shortlog am clean get-tar-commit-id pull show annotate clone grep push show-branch apply co gui rebase st archive commit help relink stage bisect config imap-send remote stash blame describe init repack status br diff instaweb replace submodule branch difftool log request-pull svn bundle fetch merge reset tag checkout filter-branch mergetool revert whatchanged cherry format-patch mv rm winner cherry-pick fsck name-rev send-email

git-completion

Page 15: Git Tricks

~$ git<tab><tab>add citool gc notes shortlog am clean get-tar-commit-id pull show annotate clone grep push show-branch apply co gui rebase st archive commit help relink stage bisect config imap-send remote stash blame describe init repack status br diff instaweb replace submodule branch difftool log request-pull svn bundle fetch merge reset tag checkout filter-branch mergetool revert whatchanged cherry format-patch mv rm winner cherry-pick fsck name-rev send-email

~$ git re<tab><tab>

git-completion

Page 16: Git Tricks

~$ git<tab><tab>add citool gc notes shortlog am clean get-tar-commit-id pull show annotate clone grep push show-branch apply co gui rebase st archive commit help relink stage bisect config imap-send remote stash blame describe init repack status br diff instaweb replace submodule branch difftool log request-pull svn bundle fetch merge reset tag checkout filter-branch mergetool revert whatchanged cherry format-patch mv rm winner cherry-pick fsck name-rev send-email

~$ git re<tab><tab>rebase remote replace reset relink repack request-pull revert ~$

git-completion

Page 17: Git Tricks

~$ git log --<tab><tab>

git-completion

Page 18: Git Tricks

~$ git log --<tab><tab>--abbrev --dense --inter-hunk-context= --pretty=--abbrev-commit --diff-filter= --left-right --quiet --abbrev= --dirstat --max-age= --raw --after= --dirstat-by-file --max-count= --relative-date --all --dirstat-by-file= --merges --remotes --all-match --dirstat= --min-age= --reverse --author= --dst-prefix= --name-only --root --before= --exit-code --name-status --shortstat --binary --ext-diff --no-color --simplify-by-decoration --branches --find-copies-harder --no-ext-diff --simplify-merges --check --first-parent --no-merges --since=--cherry-pick --follow --no-prefix --sparse --children --format= --no-renames --src-prefix=--color --full-diff --not --stat --color-words --full-history --numstat --summary --committer= --full-index --oneline --tags --cumulative --graph --parents --text --date-order --grep= --patch-with-stat --topo-order --date= --ignore-all-space --patience --until=--More--

git-completion

Page 19: Git Tricks

~$ git config core.<tab><tab>

git-completion

Page 20: Git Tricks

~$ git config core.<tab><tab>core.autocrlf core.ignoreCygwinFSTricks core.repositoryFormatVersion core.bare core.ignoreStat core.safecrlf core.compression core.logAllRefUpdates core.sharedRepository core.createObject core.loosecompression core.symlinks core.deltaBaseCacheLimit core.packedGitLimit core.trustctime core.editor core.packedGitWindowSize core.warnAmbiguousRefs core.excludesfile core.pager core.whitespace core.fileMode core.preferSymlinkRefs core.worktree core.fsyncobjectfiles core.preloadindex core.gitProxy core.quotepath ~$

git-completion

Page 21: Git Tricks

prompt

Page 22: Git Tricks

# Edite seu .bashrc

~$ vim ~/.bashrc

# Adicionando a seguinte linha

export PS1='\w$(__git_ps1 "(%s)")'

# Recarregue o ~/.bashrc

~$ source ~/.bashrc

prompt

Page 23: Git Tricks

prompt# Em um repositório git

~$

Page 24: Git Tricks

# Em um repositório git

~$ cd git-tricks

prompt

Page 25: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$

prompt

Page 26: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-name

prompt

Page 27: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$

prompt

Page 28: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$

prompt

Page 29: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$

prompt

Page 30: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README

prompt

Page 31: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$

prompt

Page 32: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README

prompt

Page 33: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README~/git-tricks(branch-name +)$

prompt

Page 34: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README~/git-tricks(branch-name +)$ export GIT_PS1_SHOWSTASHSTATE=true~/git-tricks(branch-name +)$

prompt

Page 35: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README~/git-tricks(branch-name +)$ export GIT_PS1_SHOWSTASHSTATE=true~/git-tricks(branch-name +)$ git stash

prompt

Page 36: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README~/git-tricks(branch-name +)$ export GIT_PS1_SHOWSTASHSTATE=true~/git-tricks(branch-name +)$ git stash~/git-tricks(branch-name $)$

prompt

Page 37: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README~/git-tricks(branch-name +)$ export GIT_PS1_SHOWSTASHSTATE=true~/git-tricks(branch-name +)$ git stash~/git-tricks(branch-name $)$ export GIT_PS1_SHOWUNTRACKEDFILES=true~/git-tricks(branch-name $)$

prompt

Page 38: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README~/git-tricks(branch-name +)$ export GIT_PS1_SHOWSTASHSTATE=true~/git-tricks(branch-name +)$ git stash~/git-tricks(branch-name $)$ export GIT_PS1_SHOWUNTRACKEDFILES=true~/git-tricks(branch-name $)$ touch NEWFILE

prompt

Page 39: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README~/git-tricks(branch-name +)$ export GIT_PS1_SHOWSTASHSTATE=true~/git-tricks(branch-name +)$ git stash~/git-tricks(branch-name $)$ export GIT_PS1_SHOWUNTRACKEDFILES=true~/git-tricks(branch-name $)$ touch NEWFILE~/git-tricks(branch-name $%)$

prompt

Page 40: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README~/git-tricks(branch-name +)$ export GIT_PS1_SHOWSTASHSTATE=true~/git-tricks(branch-name +)$ git stash~/git-tricks(branch-name $)$ export GIT_PS1_SHOWUNTRACKEDFILES=true~/git-tricks(branch-name $)$ touch NEWFILE~/git-tricks(branch-name $%)$ export GIT_PS1_SHOWUPSTREAM=auto

prompt

Page 41: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README~/git-tricks(branch-name +)$ export GIT_PS1_SHOWSTASHSTATE=true~/git-tricks(branch-name +)$ git stash~/git-tricks(branch-name $)$ export GIT_PS1_SHOWUNTRACKEDFILES=true~/git-tricks(branch-name $)$ touch NEWFILE~/git-tricks(branch-name $%)$ export GIT_PS1_SHOWUPSTREAM=auto~/git-tricks(branch-name $%=)$ # branch local e origin estão em sincronia

prompt

Page 42: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README~/git-tricks(branch-name +)$ export GIT_PS1_SHOWSTASHSTATE=true~/git-tricks(branch-name +)$ git stash~/git-tricks(branch-name $)$ export GIT_PS1_SHOWUNTRACKEDFILES=true~/git-tricks(branch-name $)$ touch NEWFILE~/git-tricks(branch-name $%)$ export GIT_PS1_SHOWUPSTREAM=auto~/git-tricks(branch-name $%=)$ # branch local e origin estão em sincronia~/git-tricks(branch-name $%>)$ # branch local está "a frente" do origin

prompt

Page 43: Git Tricks

# Em um repositório git

~$ cd git-tricks~/git-tricks(master)$ git checkout branch-nameSwitched to branch 'branch-name'~/git-tricks(branch-name)$ export GIT_PS1_SHOWDIRTYSTATE=true~/git-tricks(branch-name)$ lsREADME~/git-tricks(branch-name)$ echo "Olá" >> README~/git-tricks(branch-name *)$ git add README~/git-tricks(branch-name +)$ export GIT_PS1_SHOWSTASHSTATE=true~/git-tricks(branch-name +)$ git stash~/git-tricks(branch-name $)$ export GIT_PS1_SHOWUNTRACKEDFILES=true~/git-tricks(branch-name $)$ touch NEWFILE~/git-tricks(branch-name $%)$ export GIT_PS1_SHOWUPSTREAM=auto~/git-tricks(branch-name $%=)$ # branch local e origin estão em sincronia~/git-tricks(branch-name $%>)$ # branch local está "a frente" do origin ~/git-tricks(branch-name $%<)$ # branch local está "atrás" do origin

prompt

Page 44: Git Tricks

Configurações

Page 45: Git Tricks

core.excludesfile

Page 46: Git Tricks

.gitignore global

core.excludesfile

Page 47: Git Tricks

.gitignore global

~$ git config --global core.excludesfile ~/.gitignore~$

core.excludesfile

Page 48: Git Tricks

.gitignore global

~$ git config --global core.excludesfile ~/.gitignore~$ cat ~/.gitignore

.DS_Store

.rvmrcetc...

core.excludesfile

Page 49: Git Tricks

help.format

Page 50: Git Tricks

visualizar ajuda em HTML

help.format

Page 51: Git Tricks

visualizar ajuda em HTML

~$ git config --global help.format web

help.format

Page 52: Git Tricks

visualizar ajuda em HTML

~$ git config --global help.format web~$ git help commit

help.format

Page 53: Git Tricks

visualizar ajuda em HTML

~$ git config --global help.format web~$ git help commit

help.format

Page 54: Git Tricks

visualizar ajuda em HTML

~$ git config --global web.browser ff

help.format

Page 55: Git Tricks

visualizar ajuda em HTML

~$ git config --global web.browser ff~$ git config --global browser.ff.cmd "open -a Firefox.app"

help.format

Page 56: Git Tricks

visualizar ajuda em HTML

~$ git config --global web.browser ff~$ git config --global browser.ff.cmd "open -a Firefox.app"~$ git help commit

help.format

Page 57: Git Tricks

visualizar ajuda em HTML

~$ git config --global web.browser ff~$ git config --global browser.ff.cmd "open -a Firefox.app"~$ git help commit

help.format

Page 58: Git Tricks

push.default

Page 59: Git Tricks

enviar apenas o branch atual

push.default

Page 60: Git Tricks

enviar apenas o branch atual

~$ git config --global push.default current

push.default

Page 61: Git Tricks

commit.template

Page 62: Git Tricks

template para a mensagem de commit

commit.template

Page 63: Git Tricks

template para a mensagem de commit

~$ cat ~/.commit-message.txtAssunto

O que eu fiz

[ticket: X]

commit.template

Page 64: Git Tricks

template para a mensagem de commit

~$ cat ~/.commit-message.txtAssunto

O que eu fiz

[ticket: X]~$ git config --global commit.template ~/.commit-message.txt

commit.template

Page 65: Git Tricks

template para a mensagem de commit

~$ cat ~/.commit-message.txtAssunto

O que eu fiz

[ticket: X]~$ git config --global commit.template ~/.commit-message.txt~$ git commitAssunto

O que eu fiz

[ticket: X]# Please enter the commit message for your changes. Lines starting# with '#' will be ignored, and an empty message aborts the commit.# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: lib/test.rb#~

commit.template

Page 66: Git Tricks

help.autocorrect

Page 67: Git Tricks

roda o comando correto, mesmo se você digitou errado

help.autocorrect

Page 68: Git Tricks

roda o comando correto, mesmo se você digitou errado

~$ git statgit: 'stat' is not a git command. See 'git --help'.

Did you mean this? status~$

help.autocorrect

Page 69: Git Tricks

roda o comando correto, mesmo se você digitou errado

~$ git statgit: 'stat' is not a git command. See 'git --help'.

Did you mean this? status~$ git config --global help.autocorrect 1~$

help.autocorrect

Page 70: Git Tricks

roda o comando correto, mesmo se você digitou errado

~$ git statgit: 'stat' is not a git command. See 'git --help'.

Did you mean this? status~$ git config --global help.autocorrect 1~$ git statWARNING: You called a Git command named 'stat', which does not exist.Continuing under the assumption that you meant 'status'in 0.1 seconds automatically...# On branch masternothing to commit (working directory clean)~$

help.autocorrect

Page 71: Git Tricks

branch.master.rebase

Page 72: Git Tricks

`git pull` no master sempre com rebase

branch.master.rebase

Page 73: Git Tricks

`git pull` no master sempre com rebase

~$ git config branch.master.rebase true

# Chega de digitar `git pull --rebase`!

branch.master.rebase

Page 74: Git Tricks

branch.autosetuprebase

Page 75: Git Tricks

`git pull` sempre com rebase em todos os “tracking branches”

branch.autosetuprebase

Page 76: Git Tricks

`git pull` sempre com rebase em todos os “tracking branches”

~$ git config --global branch.autosetuprebase always

# Chega de digitar `git pull --rebase`!

branch.autosetuprebase

Page 77: Git Tricks

Comandos

Page 78: Git Tricks

git commit --verbose

Page 79: Git Tricks

Exibe um diff abaixo da mensagem de commit

git commit --verbose

Page 80: Git Tricks

Exibe um diff abaixo da mensagem de commit

~/git-tricks(master)$ echo "Mundo" >> README~/git-tricks(master *)$

git commit --verbose

Page 81: Git Tricks

Exibe um diff abaixo da mensagem de commit

~/git-tricks(master)$ echo "Mundo" >> README~/git-tricks(master *)$ git commit -a -v # Please enter the commit message for your changes. Lines starting# with '#' will be ignored, and an empty message aborts the commit.[...]#diff --git a/README b/READMEindex 1ca34a8..feae20b 100644--- a/README+++ b/README@@ -1 +1,2 @@ Olá+Mundo

git commit --verbose

Page 82: Git Tricks

git diff --word-diff

Page 83: Git Tricks

diff com destaque nas palavras

git diff --word-diff

Page 84: Git Tricks

diff com destaque nas palavras

git diff --word-diff

~/git-tricks(master)$ git diffdiff --git a/README b/READMEindex 84dd63e..0cc3cbe 100644--- a/README+++ b/README@@ -1 +1 @@-Olá Mundo+Oi Mundo~/git-tricks(master)$

Page 85: Git Tricks

diff com destaque nas palavras

git diff --word-diff

~/git-tricks(master)$ git diffdiff --git a/README b/READMEindex 84dd63e..0cc3cbe 100644--- a/README+++ b/README@@ -1 +1 @@-Olá Mundo+Oi Mundo~/git-tricks(master)$ git diff --word-diffdiff --git a/README b/READMEindex 84dd63e..0cc3cbe 100644--- a/README+++ b/README@@ -1 +1 @@[-Olá-]{+Oi+} Mundo

Page 86: Git Tricks

git log --decorate

Page 87: Git Tricks

Exibe branches e tags no git log

git log --decorate

Page 88: Git Tricks

Exibe branches e tags no git log

~/git-tricks(fixes)$ git log --oneline --decoratefceaeb5 (HEAD, fixes) typoc1bcf8a (tag: v0.2.0) Fix80e9826 (origin/master, origin/HEAD, master) Second commit3247745 (tag: v0.1.0) Initial commit~/git-tricks(fixes)$

git log --decorate

Page 89: Git Tricks

git status -s -b

Page 90: Git Tricks

mensagem de status curta

git status -s -b

Page 91: Git Tricks

mensagem de status curta

~/git-tricks(master)$ git status -s -b## master...origin/master [ahead 2, behind 3] M READMEA TODO?? LICENSE?? AUTHORS~/git-tricks(master)$

git status -s -b

Page 92: Git Tricks

git push -u

Page 93: Git Tricks

envia um branch e configura o tracking

git push -u

Page 94: Git Tricks

envia um branch e configura o tracking

~/git-tricks(fixes)$ git push -u origin fixes * [new branch] fixes -> fixesBranch fixes set up to track remote branch fixes from origin.~/git-tricks(fixes)$

git push -u

Page 95: Git Tricks

git checkout -t

Page 96: Git Tricks

cria, faz checkout e tracking de branches remotos

git checkout -t

Page 97: Git Tricks

cria, faz checkout e tracking de branches remotos

~/git-tricks(master)$ git checkout -t origin/fixesBranch fixes set up to track remote branch fixes from origin.Switched to a new branch 'fixes'~/git-tricks(fixes)$

git checkout -t

Page 98: Git Tricks

git branch

Page 99: Git Tricks

visualizando informações dos branches

git branch

Page 100: Git Tricks

visualizando informações dos branches

~/git-tricks(master)$ git branchfixesi18n* masterrelease~/git-tricks(master)$

git branch

Page 101: Git Tricks

visualizando informações dos branches

~/git-tricks(master)$ git branchfixesi18n* masterrelease~/git-tricks(master)$ git branch --mergedfixes* master~/git-tricks(master)$

git branch

Page 102: Git Tricks

visualizando informações dos branches

~/git-tricks(master)$ git branchfixesi18n* masterrelease~/git-tricks(master)$ git branch --mergedfixes* master~/git-tricks(master)$ git branch --no-mergedi18nrelease~/git-tricks(master)$

git branch

Page 103: Git Tricks

visualizando informações dos branches

~/git-tricks(master)$ git branchfixesi18n* masterrelease~/git-tricks(master)$ git branch --mergedfixes* master~/git-tricks(master)$ git branch --no-mergedi18nrelease~/git-tricks(master)$ git branch --contains c1bcf8afixes* master~/git-tricks(master)$

git branch

Page 104: Git Tricks

git blame -L

Page 105: Git Tricks

blame com range de linhas

git blame -L

Page 106: Git Tricks

blame com range de linhas

~/rails(master)$ git blame version.rbb1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 1) module Railsb1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 2) module VERSION #:nodoc:b1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 3) MAJOR = 321b1f297 (David Heinemeier Hansson 2010-08-23 21:44:57 -0500 4) MINOR = 1b1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 5) TINY = 0ccd2f3ed (Carl Lerche 2010-11-16 15:11:46 -0800 6) PRE = "beta"b1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 7) ccd2f3ed (Carl Lerche 2010-11-16 15:11:46 -0800 8) STRING = b1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 9) endb1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 10) end~/rails(master)$

git blame -L

Page 107: Git Tricks

blame com range de linhas

~/rails(master)$ git blame version.rbb1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 1) module Railsb1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 2) module VERSION #:nodoc:b1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 3) MAJOR = 321b1f297 (David Heinemeier Hansson 2010-08-23 21:44:57 -0500 4) MINOR = 1b1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 5) TINY = 0ccd2f3ed (Carl Lerche 2010-11-16 15:11:46 -0800 6) PRE = "beta"b1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 7) ccd2f3ed (Carl Lerche 2010-11-16 15:11:46 -0800 8) STRING = b1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 9) endb1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 10) end~/rails(master)$ git blame -L 4,7 version.rb21b1f297 (David Heinemeier Hansson 2010-08-23 21:44:57 -0500 4) MINOR = 1b1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 5) TINY = 0ccd2f3ed (Carl Lerche 2010-11-16 15:11:46 -0800 6) PRE = "beta"b1769fe0 (Bryan Helmkamp 2010-03-01 23:02:55 -0500 7)~/rails(master)$

git blame -L

Page 108: Git Tricks

git blame -C

Page 109: Git Tricks

blame com informações de onde o conteúdo veio

git blame -C

Page 110: Git Tricks

blame com informações de onde o conteúdo veio

~/rails(master)$ git blame -C -L 2,6 README.rdocb70062f1 README (José Valim 2010-07-21 12:37:05 +0200 2) 3cd9627b README.rdoc (Xavier Noria 2010-08-21 02:23:04 +0200 3) dba196cb railties/README (Pratik Naik 2010-01-17 03:26:20 +0530 4)3e732780 railties/README (David Heinemeier Hansson 2008-03-29 18:45:39 +0000 5) 1535b02a railties/README (Matt Di Pasquale 2010-03-24 02:17:09 -0400 6)~/rails(master)$

git blame -C

Page 111: Git Tricks

Features

Page 112: Git Tricks

stash

Page 113: Git Tricks

guarda as alterações em um “commit” temporário

stash

Page 114: Git Tricks

guarda as alterações em um “commit” temporário

~/git-tricks(master)$ echo "Hello World" >> README~/git-tricks(master)$ git status -s M README~/git-tricks(master)$

stash

Page 115: Git Tricks

guarda as alterações em um “commit” temporário

~/git-tricks(master)$ echo "Hello World" >> README~/git-tricks(master)$ git status -s M README~/git-tricks(master)$ git stashSaved working directory and index state WIP on master: 51e034d typoHEAD is now at 51e034d typo~/git-tricks(master)$

stash

Page 116: Git Tricks

guarda as alterações em um “commit” temporário

~/git-tricks(master)$ echo "Hello World" >> README~/git-tricks(master)$ git status -s M README~/git-tricks(master)$ git stashSaved working directory and index state WIP on master: 51e034d typoHEAD is now at 51e034d typo~/git-tricks(master)$ git status -s~/git-tricks(master)$ git stash liststash@{0}: WIP on master: 51e034d typo~/git-tricks(master)$

stash

Page 117: Git Tricks

guarda as alterações em um “commit” temporário

~/git-tricks(master)$ echo "Hello World" >> README~/git-tricks(master)$ git status -s M README~/git-tricks(master)$ git stashSaved working directory and index state WIP on master: 51e034d typoHEAD is now at 51e034d typo~/git-tricks(master)$ git status -s~/git-tricks(master)$ git stash liststash@{0}: WIP on master: 51e034d typo~/git-tricks(master)$ git show stash@{0}commit 2f7289f68669d3b5e70ecff1ba7e3ac4742135e9Merge: 51e034d 36167acAuthor: Arthur Zapparoli <[email protected]>Date: Wed Feb 20 20:23:47 2011 -0300

WIP on master: 51e034d typo

diff --cc READMEindex 1a52f2e,1a52f2e..003468d--- a/README+++ b/README@@@ -1,2 -1,2 +1,3 @@@ Oi Mundo .++Hello World

stash

Page 118: Git Tricks

~/git-tricks(master)$ git stash pop~/git-tricks(master)$ git status -s M README~/git-tricks(master)$ git status list~/git-tricks(master)$

stashguarda as alterações em um “commit” temporário

Page 119: Git Tricks

~/git-tricks(master)$ git stash pop~/git-tricks(master)$ git status -s M README~/git-tricks(master)$ git status list~/git-tricks(master)$ git stash save "mensagem"Saved working directory and index state On master: mensagemHEAD is now at 51e034d typo~/git-tricks(master)$ git stash liststash@{0}: On master: mensagem~/git-tricks(master)$

stashguarda as alterações em um “commit” temporário

Page 120: Git Tricks

staging area

Page 121: Git Tricks

tenho 2 arquivos, quero adicionar só 1

staging area

Page 122: Git Tricks

tenho 2 arquivos, quero adicionar só 1

~/git-tricks(master)$ git status# On branch master# Changed but not updated:## modified: AUTHORS# modified: README#no changes added to commit (use "git add" and/or "git commit -a")~/git-tricks(master)$

staging area

Page 123: Git Tricks

tenho 2 arquivos, quero adicionar só 1

~/git-tricks(master)$ git status# On branch master# Changed but not updated:## modified: AUTHORS# modified: README#no changes added to commit (use "git add" and/or "git commit -a")~/git-tricks(master)$ git add README~/git-tricks(master)$ git status# On branch master# Changes to be committed:## modified: README## Changed but not updated:## modified: AUTHORS#~/git-tricks(master)$

staging area

Page 124: Git Tricks

tenho 2 arquivos, quero adicionar só 1

~/git-tricks(master)$ git commit -m "English!"[master 76b2c02] English 1 files changed, 1 insertions(+), 0 deletions(-)~/git-tricks(master)$

staging area

Page 125: Git Tricks

tenho 2 arquivos, quero adicionar só 1

~/git-tricks(master)$ git commit -m "English!"[master 76b2c02] English 1 files changed, 1 insertions(+), 0 deletions(-)~/git-tricks(master)$ git status# On branch master# Changed but not updated:## modified: AUTHORS#no changes added to commit (use "git add" and/or "git commit -a")~/git-tricks(master)$

staging area

Page 126: Git Tricks

quando eu quero adicionar apenas uma parte de um arquivo

staging area

Page 127: Git Tricks

quando eu quero adicionar apenas uma parte de um arquivo

~/git-tricks(master)$ git status -s M AUTHORS~/git-tricks(master)$

staging area

Page 128: Git Tricks

quando eu quero adicionar apenas uma parte de um arquivo

~/git-tricks(master)$ git status -s M AUTHORS~/git-tricks(master)$ git add -i*** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elpWhat now>

staging area

Page 129: Git Tricks

quando eu quero adicionar apenas uma parte de um arquivo

~/git-tricks(master)$ git status -s M AUTHORS~/git-tricks(master)$ git add -i*** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elpWhat now> 5 1: unchanged +2/-0 [A]UTHORSPatch update>> 1* 1: unchanged +2/-0 [A]UTHORSPatch update>>diff --git a/AUTHORS b/AUTHORSindex e69de29..5db9767 100644--- a/AUTHORS+++ b/AUTHORS@@ -0,0 +1,2 @@+Arthur+GuilhermeStage this hunk [y,n,q,a,d,/,e,?]?

staging area

Page 130: Git Tricks

quando eu quero adicionar apenas uma parte de um arquivo

Stage this hunk [y,n,q,a,d,/,e,?]? y - stage this hunkn - do not stage this hunkq - quit; do not stage this hunk nor any of the remaining onesa - stage this hunk and all later hunks in the filed - do not stage this hunk nor any of the later hunks in the fileg - select a hunk to go to/ - search for a hunk matching the given regexj - leave this hunk undecided, see next undecided hunkJ - leave this hunk undecided, see next hunkk - leave this hunk undecided, see previous undecided hunkK - leave this hunk undecided, see previous hunks - split the current hunk into smaller hunkse - manually edit the current hunk? - print help@@ -0,0 +1,2 @@+Arthur+GuilhermeStage this hunk [y,n,q,a,d,/,e,?]?

staging area

Page 131: Git Tricks

quando eu quero adicionar apenas uma parte de um arquivo

Stage this hunk [y,n,q,a,d,/,e,?]? e# Manual hunk edit mode -- see bottom for a quick guide@@ -0,0 +1,2 @@+Arthur+Guilherme# ---# To remove '-' lines, make them ' ' lines (context).# To remove '+' lines, delete them.# Lines starting with # will be removed.## If the patch applies cleanly, the edited hunk will immediately be# marked for staging. If it does not apply cleanly, you will be given# an opportunity to edit again. If all lines of the hunk are removed,# then the edit is aborted and the hunk is left unchanged.

staging area

Page 132: Git Tricks

quando eu quero adicionar apenas uma parte de um arquivo

Stage this hunk [y,n,q,a,d,/,e,?]? e# Manual hunk edit mode -- see bottom for a quick guide@@ -0,0 +1,2 @@+Arthur+Guilherme# ---# To remove '-' lines, make them ' ' lines (context).# To remove '+' lines, delete them.# Lines starting with # will be removed.## If the patch applies cleanly, the edited hunk will immediately be# marked for staging. If it does not apply cleanly, you will be given# an opportunity to edit again. If all lines of the hunk are removed,# then the edit is aborted and the hunk is left unchanged.*** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elpWhat now> 7Bye.~/git-tricks(master)$

staging area

Page 133: Git Tricks

quando eu quero adicionar apenas uma parte de um arquivo

~/git-tricks(master)$ git status# On branch master# Changes to be committed:## modified: AUTHORS## Changed but not updated:## modified: AUTHORS#~/git-tricks(master)$

staging area

Page 134: Git Tricks

rebase

Page 135: Git Tricks

reaplica as mudanças de um branch em cima de outro

rebase

Page 136: Git Tricks

reaplica as mudanças de um branch em cima de outro

~/git-tricks(master)$ git branch authors* master~/git-tricks(master)$ git branch --no-merged authors~/git-tricks(master)$ git log --oneline --graph* f121878 Fix* 76b2c02 English[...]~/git-tricks(master)$

rebase

Page 137: Git Tricks

reaplica as mudanças de um branch em cima de outro

~/git-tricks(master)$ git branch authors* master~/git-tricks(master)$ git branch --no-merged authors~/git-tricks(master)$ git log --oneline --graph* f121878 Fix* 76b2c02 English[...]~/git-tricks(master)$ git merge authors~/git-tricks(master)$ git log --oneline --graph --decorate* c81cff6 (HEAD, master) Merge branch 'authors'|\ | * 1e2f8a4 (authors) New Authors* | f121878 Fix|/ * 76b2c02 English

rebase

Page 138: Git Tricks

reaplica as mudanças de um branch em cima de outro

~/git-tricks(master)$ git branch authors* master~/git-tricks(master)$ git branch --no-merged authors~/git-tricks(master)$ git log --oneline --graph* f121878 Fix* 76b2c02 English[...]~/git-tricks(master)$ git rebase authorsFirst, rewinding head to replay your work on top of it...Applying: Fix~/git-tricks(master)$ git log --oneline --graph --decorate* b28e647 (HEAD, master) Fix* 1e2f8a4 (authors) New Authors* 76b2c02 English

rebase

Page 139: Git Tricks

reescrevendo a história

Page 140: Git Tricks

editando o último commit

reescrevendo a história

Page 141: Git Tricks

editando o último commit

reescrevendo a história

amend

Page 142: Git Tricks

editando o último commit

~/git-tricks(master)$ git log --onelinefceaeb5 typoc1bcf8a Fix80e9826 Second commit3247745 Initial commit~/git-tricks(master)$

reescrevendo a história

amend

Page 143: Git Tricks

editando o último commit

~/git-tricks(master)$ git log --onelinefceaeb5 typoc1bcf8a Fix80e9826 Second commit3247745 Initial commit~/git-tricks(master)$ echo "." >> README ~/git-tricks(master)$ git commit -a --amend[master 5dc6308] typo 1 files changed, 2 insertions(+), 1 deletions(-)~/git-tricks(master)$

reescrevendo a história

amend

Page 144: Git Tricks

editando o último commit

~/git-tricks(master)$ git log --onelinefceaeb5 typoc1bcf8a Fix80e9826 Second commit3247745 Initial commit~/git-tricks(master)$ echo "." >> README ~/git-tricks(master)$ git commit -a --amend[master 5dc6308] typo 1 files changed, 2 insertions(+), 1 deletions(-)~/git-tricks(master)$ git log --oneline5dc6308 typoc1bcf8a Fix80e9826 Second commit3247745 Initial commit~/git-tricks(master)$

reescrevendo a história

amend

Page 145: Git Tricks

editando o último commit

~/git-tricks(master)$ git log --onelinefceaeb5 typoc1bcf8a Fix80e9826 Second commit3247745 Initial commit~/git-tricks(master)$ echo "." >> README ~/git-tricks(master)$ git commit -a --amend[master 5dc6308] typo 1 files changed, 2 insertions(+), 1 deletions(-)~/git-tricks(master)$ git log --oneline5dc6308 typoc1bcf8a Fix80e9826 Second commit3247745 Initial commit~/git-tricks(master)$

reescrevendo a história

amend

Page 146: Git Tricks

reescrevendo a história

Page 147: Git Tricks

editando vários commits de uma só vez

reescrevendo a história

Page 148: Git Tricks

editando vários commits de uma só vez

reescrevendo a história

rebase -i

Page 149: Git Tricks

editando vários commits de uma só vez

~/git-tricks(master)$ git log --onelineb28e647 Fix1e2f8a4 New Authors76b2c02 English~/git-tricks(master)$

reescrevendo a história

rebase -i

Page 150: Git Tricks

editando vários commits de uma só vez

~/git-tricks(master)$ git log --onelineb28e647 Fix1e2f8a4 New Authors76b2c02 English~/git-tricks(master)$ git rebase -i HEAD~3pick 76b2c02 Englishpick 1e2f8a4 New Authorspick b28e647 Fix

# Rebase 76b2c02..b28e647 onto 76b2c02## Commands:# p, pick = use commit# r, reword = use commit, but edit the commit message# e, edit = use commit, but stop for amending# s, squash = use commit, but meld into previous commit# f, fixup = like "squash", but discard this commit's log message## If you remove a line here THAT COMMIT WILL BE LOST.# However, if you remove everything, the rebase will be aborted.#

reescrevendo a história

rebase -i

Page 151: Git Tricks

~/git-tricks(master)$ git log --onelineb28e647 Fix1e2f8a4 New Authors76b2c02 English~/git-tricks(master)$ git rebase -i HEAD~3pick 76b2c02 Englishedit 1e2f8a4 New Authorspick b28e647 Fix

# Rebase 76b2c02..b28e647 onto 76b2c02## Commands:# p, pick = use commit# r, reword = use commit, but edit the commit message# e, edit = use commit, but stop for amending# s, squash = use commit, but meld into previous commit# f, fixup = like "squash", but discard this commit's log message## If you remove a line here THAT COMMIT WILL BE LOST.# However, if you remove everything, the rebase will be aborted.#

reescrevendo a história

rebase -i

editando vários commits de uma só vez

Page 152: Git Tricks

Stopped at 1e2f8a4... New AuthorsYou can amend the commit now, with

git commit --amend

Once you are satisfied with your changes, run

git rebase --continue

~/git-tricks(master|REBASE-i)$

reescrevendo a história

rebase -i

editando vários commits de uma só vez

Page 153: Git Tricks

Stopped at 1e2f8a4... New AuthorsYou can amend the commit now, with

git commit --amend

Once you are satisfied with your changes, run

git rebase --continue

~/git-tricks(master|REBASE-i)$ git commit --amend[detached HEAD 0c434b4] New Authors: Arthur and Guilherme 1 files changed, 2 insertions(+), 0 deletions(-)~/git-tricks(master|REBASE-i)$ git rebase --continueSuccessfully rebased and updated refs/heads/master.~/git-tricks(master)$ git log --onelineedac081 Fix0c434b4 New Authors: Arthur and Guilherme76b2c02 English

reescrevendo a história

rebase -i

editando vários commits de uma só vez

Page 154: Git Tricks

Stopped at 1e2f8a4... New AuthorsYou can amend the commit now, with

git commit --amend

Once you are satisfied with your changes, run

git rebase --continue

~/git-tricks(master|REBASE-i)$ git commit --amend[detached HEAD 0c434b4] New Authors: Arthur and Guilherme 1 files changed, 2 insertions(+), 0 deletions(-)~/git-tricks(master|REBASE-i)$ git rebase --continueSuccessfully rebased and updated refs/heads/master.~/git-tricks(master)$ git log --onelineedac081 Fix0c434b4 New Authors: Arthur and Guilherme76b2c02 English

reescrevendo a história

rebase -i

Antes:b28e647 Fix1e2f8a4 New Authors76b2c02 English

editando vários commits de uma só vez

Page 155: Git Tricks

reordenando commits

reescrevendo a história

rebase -i

~/git-tricks(master)$ git log --onelineedac081 Fix0c434b4 New Authors: Arthur and Guilherme76b2c02 English3933fbc Adding AUTHORS~/git-tricks(master)$ git rebase -i HEAD~4pick 3933fbc Adding AUTHORSpick 76b2c02 Englishpick 0c434b4 New Authors: Arthur and Guilhermepick edac081 Fix

Page 156: Git Tricks

reordenando commits

reescrevendo a história

rebase -i

~/git-tricks(master)$ git log --onelineedac081 Fix0c434b4 New Authors: Arthur and Guilherme76b2c02 English3933fbc Adding AUTHORS~/git-tricks(master)$ git rebase -i HEAD~4pick 76b2c02 Englishpick edac081 Fixpick 3933fbc Adding AUTHORSpick 0c434b4 New Authors: Arthur and Guilherme

Page 157: Git Tricks

reordenando commits

reescrevendo a história

rebase -i

~/git-tricks(master)$ git log --onelineedac081 Fix0c434b4 New Authors: Arthur and Guilherme76b2c02 English3933fbc Adding AUTHORS~/git-tricks(master)$ git rebase -i HEAD~4pick 76b2c02 Englishpick edac081 Fixpick 3933fbc Adding AUTHORSpick 0c434b4 New Authors: Arthur and Guilherme

~/git-tricks(master)$ git log --onelinec3187e3 New Authors: Arthur and Guilherme40a5b76 Adding AUTHORS76bc060 Fix36553c5 English~/git-tricks(master)$

Page 158: Git Tricks

deletando commits

reescrevendo a história

rebase -i

Page 159: Git Tricks

deletando commits

reescrevendo a história

rebase -i

~/git-tricks(master)$ git log --onelinec3187e3 New Authors: Arthur and Guilherme40a5b76 Adding AUTHORS76bc060 Fix36553c5 English~/git-tricks(master)$ git rebase -i HEAD~4pick 36553c5 Englishpick edac081 Fixpick 3933fbc Adding AUTHORSpick 0c434b4 New Authors: Arthur and Guilherme

Page 160: Git Tricks

reescrevendo a história

rebase -i

~/git-tricks(master)$ git log --onelinec3187e3 New Authors: Arthur and Guilherme40a5b76 Adding AUTHORS76bc060 Fix36553c5 English~/git-tricks(master)$ git rebase -i HEAD~4pick 36553c5 Englishpick 3933fbc Adding AUTHORSpick 0c434b4 New Authors: Arthur and Guilherme

deletando commits

Page 161: Git Tricks

reescrevendo a história

rebase -i

~/git-tricks(master)$ git log --onelinec3187e3 New Authors: Arthur and Guilherme40a5b76 Adding AUTHORS76bc060 Fix36553c5 English~/git-tricks(master)$ git rebase -i HEAD~4pick 36553c5 Englishpick 3933fbc Adding AUTHORSpick 0c434b4 New Authors: Arthur and Guilherme

~/git-tricks(master)$ git log --onelinef648606 New Authors: Arthur and Guilherme373183d Adding AUTHORS36553c5 English~/git-tricks(master)$

deletando commits

Page 162: Git Tricks

reescrevendo a história

rebase -i

juntando commits

Page 163: Git Tricks

reescrevendo a história

rebase -i

~/git-tricks(master)$ git log --onelinef648606 New Authors: Arthur and Guilherme373183d Adding AUTHORS36553c5 English~/git-tricks(master)$ git rebase -i HEAD~3pick 36553c5 Englishpick 373183d Adding AUTHORSpick f648606 New Authors: Arthur and Guilherme

juntando commits

Page 164: Git Tricks

reescrevendo a história

rebase -i

~/git-tricks(master)$ git log --onelinef648606 New Authors: Arthur and Guilherme373183d Adding AUTHORS36553c5 English~/git-tricks(master)$ git rebase -i HEAD~3pick 36553c5 Englishpick 373183d Adding AUTHORSsquash f648606 New Authors: Arthur and Guilherme

juntando commits

Page 165: Git Tricks

reescrevendo a história

rebase -i

~/git-tricks(master)$ git log --onelinef648606 New Authors: Arthur and Guilherme373183d Adding AUTHORS36553c5 English~/git-tricks(master)$ git rebase -i HEAD~3pick 36553c5 Englishpick 373183d Adding AUTHORSsquash f648606 New Authors: Arthur and Guilherme

~/git-tricks(master)$ # This is a combination of 2 commits. # The first commit's message is:

Adding AUTHORS

# This is the 2nd commit message:

New Authors: Arthur and Guilherme

# Please enter the commit message for your changes. Lines starting# with '#' will be ignored, and an empty message aborts the commit.# Not currently on any branch.# Changes to be committed:

juntando commits

Page 166: Git Tricks

reescrevendo a história

rebase -i

[detached HEAD 8f851b8] Adding AUTHORS 1 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 AUTHORSSuccessfully rebased and updated refs/heads/master.~/git-tricks(master)$ git log --oneline8f851b8 Adding AUTHORS36553c5 English~/git-tricks(master)$

juntando commits

Page 167: Git Tricks

ajuda a encontrar onde foram introduzidos bugs

bisect

Page 168: Git Tricks

escolha quais commits fazer merge

cherry-pick

Page 169: Git Tricks

cria patches à partir de commits

format-patch

Page 170: Git Tricks

recupera dados perdidos

reflog

Page 171: Git Tricks

define como trabalhar com arquivos binários

attributes

Page 172: Git Tricks

lembra resoluções de conflitos e as aplica automaticamente na próxima vez

rerere

Page 173: Git Tricks

remove objetos obsoletos

garbage collector

Page 174: Git Tricks

adiciona notas aos seus commits

notes

Page 175: Git Tricks

uma maneira melhor de “exportar” repositórios

bundlesbundles

Page 176: Git Tricks

e muito mais...

Page 177: Git Tricks

egenial.com.br/git

Git: do zero a samurai

Page 178: Git Tricks

Dúvidas?

Page 179: Git Tricks

Obrigado!