O documento apresenta um guia sobre o uso do sistema de controle de versão Git. Resume conceitos como commits, branches e fluxos de trabalho comuns. Também discute potenciais problemas como conflitos e formas de resolvê-los, como usar rebase e merge de forma a evitar complicações.
10. Hovertext:“If that doesn't fix it, git.txt
contains the phone number of a friend
of mine who understands git.
Just wait through a few minutes of 'It's
really pretty simple, just think of
branches as...' and eventually you'll learn
the commands that will fix everything.”
Git - 30/Out/2015
https://xkcd.com/1597/
11. Nem leigo, nem especialista
Um bom profissional busca aprender os
conceitos por trás das suas ferramentas
e ganhar experiência no seu uso
12. “Regrinhas”
● “Dá git pull de vez em quando”
● “Nunca use git pull”
● “Sempre dê rebase”
● “Nunca dê rebase”
18. Git
Um sistema que ajuda pessoas a
trabalhar com código-fonte de forma
organizada e simultânea
19. Commit
Quando uma mudança significativa
acontece, você leva ela para o palco
(stage) e tira uma fotografia (commit)
A92347C2…1F2493E34: Muda cor do botão Enviar
DescriçãoID
20. Commit == fotografia
“Git is all about composing and saving
snapshots of your project and then
working with and comparing those
snapshots”
http://gitref.org/basic/
21. Branch
Commits formam uma linha do tempo
Você pode criar linhas alternativas
(branches) e depois integrar as
mudanças na linha principal (master)
22. Trabalho em grupo
Seus commits “moram” em um
repositório local (.git/)
Você pode mandar (push) commits para
outros repositórios (remotes)
e também baixar commits deles (pull)
23. Grupo organizado
Existem várias formas de organizar esse
fluxo de commits/branches (workflows)
Um repositório central que
facilite code reviews por meio
de pull requests ajuda bastante...
24. Exemplo de workflow
● Atualiza master (remote ⇒ local)
● Novo branch a partir dali
● Commits evolutivos
● Push e PR (meu branch ⇒ master)
●
● Merge, auto-deploy,
25. Mas e se...
● ...o CI* falhou?
● ...outros devs sugerem mudanças?
● ...o master mudou enquanto isso?
*Continuous Integration
38. git rebase
Refaz o branch a partir do mesmo
ponto (ou não), criando novos commits
iguais aos originais (ou não)
39. Utilidades do rebase
● (re-)basear suas mudanças num
master mais atualizado
(git fetch; git rebase origin/master)
● Simplificar os seus commits
(git rebase --interactive master)
40. Quando pode dar errado?
Atualizar o branch e simplificar
commits ao mesmo tempo é difícil
Refazer um branch que já está
publicado causa incompatibilidades
41. Sugestão pré-PR (1)
Refaça seu branch a partir de um
master mais recente
(sem modificar os commits)
git checkout master
git pull
git checkout meu-branch
git rebase master
42. Sugestão pré-PR (2)
Agora que você reduziu a chance de
conflito, simplifique o branch
(sem modificar a origem)
git rebase –interactive master
43. Sugestão ≠ regra
Se o master não mudou (muito),
não precisa atualizar
Se os seus commits estão claros,
não precisa interagir
44. E se o PR já foi?
Novos commits podem ser
adicionados ao remote via git push
Rebase não é tão simples...
51. git diff & git apply
git diff c1 c2 cria (na saída padrão)
o patch que transforma c1 em c2
git apply aplica um patch qualquer na
sua cópia do código
52. Automatizando
Ao invés de refazer as mudanças
manualmente, você pode gerar um
patch delas com o git diff e dar um
git apply dele no código mais recente
53. git log & git reflog
git log lista os commits feitos no
branch atual (--grep faz buscas)
git reflog lista as operações que
alteraram o repositório local
71. ~/.gitignore
Se o seu computador é o único que
gera “lixo”, use um .gitignore global
git config --global
core.excludesfile ~/.gitignore
72. git cherry-pick
Cria um commit no seu branch com
as mudanças de outro commit
(por exemplo, de outro branch)
git cherry-pick id
73. Obrigado!
Carlos Duarte Do Nascimento
@chesterbr • http://chester.me
shopify.com/careers
http://slideshare.net/chesterbr
74. This presentation is available under the Creative Commons “by-nc” 3.0 license
(available at https://creativecommons.org/licenses/by-nc/3.0/),
noticing the exceptions below.
Images and text from third parties were included (with due credits wherever possible)
under a fair use assumption (or, for Brazilian media, under Art. 46 of Law 9610/98)
and/or under their respective licenses. Omissions are unintended and corrections
welcome. Such content is excluded from the license above.
GitHub, the GitHub logo and mascot are trademarks of GitHub, Inc.
Shopify and the Shopify logo are trademaks of Shopify, Inc.
The opinions stated here belong solely to the author, not offically representing his
employer’s opinions, nor any of of the persons or companies mentioned in any extent.
Credits And License