Este documento fornece uma introdução aos conceitos e comandos básicos do Git. Explica o que é o Git e seus principais conceitos como repositórios, branches, commits e merges. Apresenta os principais comandos para inicializar e trabalhar com um repositório local e remoto, como status, add, commit, push e pull. Também aborda branching, merges, conflitos e fluxos de trabalho como o Git Flow.
12. YURI REIS
DEV FULL STACK
KOERICH ENGENHARIA
GESTÃO EM TI
FILHAS MARAVILHOSAS
TDC, AGILE TESTERS CONFERENCE
RPG, RTS, FIGHTING
FRONTEND, PYTHON, TESTES
13. YURI REIS
DEV FULL STACK
KOERICH ENGENHARIA
ANGULAR, ANGULARJS, GULP,
SASS, BOOTSTRAP 4
FLASK, EXPRESS, .NET CORE
PYTHON, C#, TYPESCRIPT,
HTML, CSS, JAVASCRIPT
MYSQL, MONGO (NOSQL)
DOCKER
19. 1) Criar pasta para o projeto
2) Abrir a pasta do projeto com o VSCODE
3) Inicializar o repositório (comando: git init)
4) Configuração de usuário local:
a) git config --global user.name "seu username"
b) git config --global user.email “seu@email.com”
(criar conta, realizar o set up de usuário e inicializar o repositório local)
3
23. COMMIT: DESCREVER O COMANDO AQUI
STATUS: apresenta o nome da branch que você está, além de listar os arquivos
que foram modificados na “WORKING TREE” (separados por estágios)
git status
ADD: apresenta o nome da branch que você está, além de listar os arquivos que
foram modificados na “WORKING TREE”
git add -A
24. COMMIT: Cada vez que você salva ou consolida o estado do seu projeto
git commit -m “mensagem clara e curta”
-- AMEND: adiciona os arquivos alterados (ou novos) que estão na staging
area ao último commit
git commit --amend
25. LOG: apresenta todos os commits (e responsável por eles), começando do mais novo
git log
DIFF: apresenta o antes e o depois dos arquivos que foram modificados na
“WORKING TREE”
git diff
26. RESET HEAD: faz a reversão do estágio do(s) arquivo(s) para a “STAGING
AREA”
git reset HEAD
--HARD: acrescentando esse parâmetro, faz a reversão do estágio do(s)
arquivo(s) para a “WORKING AREA”
git reset --hard HEAD
BLAME: quem realizou as alterações em um determinado arquivo e quando
git blame <<arquivo>>
27. 1) Criar um arquivo do tipo .txt
2) Executar o comando git status (arquivo do tipo .txt deverá aparecer
na “WORKING AREA”)
3) Criar o arquivo .gitignore
4) Editar o arquivo .gitignore e colocar o seguinte texto: *.txt
5) Executar o comando git status (o arquivo txt não deverá aparecer na
“WORKING AREA”)
6) Adicionar o arquivo .gitignore para a STAGING AREA (git add -A)
7) Realizar o commit com a seguinte frase: “Ignorando arquivos txt da
pasta raiz”
(realizar o primeiro commit)
10
29. REMOTE: adiciona a referência a um repositório remoto através de um alias
git remote add origin <<url_do_repositório>>
PUSH: empurra as alterações para a nuvem
git push origin master
PULL: “puxa” as atualizações existentes em relação a branch que você referenciar
git pull origin master
30.
31. 1) Realizar cadastro no GITHUB
2) Criar um repositório
3) Copiar o link com o protocolo https
4) Adicionar o host remoto (git remote add origin <<link>>)
5) Realizar o push da branch master para a nuvem
6) Atualizar o repositório remoto e verificar se o código está lá.
(disponibilizar o código na nuvem)
10
36. BRANCH: lista as branches existentes (localmente)
git branch
<<nome_da_branch>>: cria uma branch nova (localmente) com
base na branch que você está “checado”
git branch <<nome_da_branch>>
-D: remove a branch (é necessário dar checkout da mesma, ou seja, não
estar nela) localmente
git branch -D <<nome_da_branch>>
38. FETCH: sincroniza as informações locais com o que está no remoto
git fetch
CHECKOUT: sai de uma branch e vai para outra
git checkout <<nome_da_branch>>
STASH: guarda todo o conteúdo da “WORKING AREA” e da “STAGING AREA” em
uma pilha (stash)
git stash
41. 1) Dar checkout da master para a branch feature/1
2) Criar um arquivo novo com algum conteúdo dentro
3) Realizar o commit deste arquivo
4) Dar checkout novamente para a master
5) Realizar o merge da branch feature/1 na master (localmente)
6) Verificar com o comando log se o commit da feature/1 está na master
(ver pela mensagem)
7) Dar o push da master para a nuvem
(realizar o merge localmente)
10
42.
43. CONFLITOS!
O QUE É?
- Duas pessoas alteram
o mesmo arquivo, na
mesma linha.
COMO LIDAR?
- Melhorar a qualidade
dos conflitos.
- Diminuir a frequência
em que ocorrem.
- Não realizar commits
diretamente em
branches “longevas”.
- Manter o histórico
linear. (sem commits
de merge)
- Realizar Rebase
44. BRANCHES REMOTAS
● São referências ao estado de seus branches
no seu repositório remoto.
● São branches locais que você não pode
mover, eles se movem automaticamente
sempre que você faz alguma comunicação via
rede.
O QUE SÃO? UTILIDADE
● Branches remotos agem como
marcadores para lembrá-lo onde
estavam seus branches no seu
repositório remoto na última vez que
você se conectou a eles.
● Também servem para comparação com
as branches de base para merge
● Permite visualização para code review
45. PUSH: empurra as alterações para a nuvem
git push origin <<nome_da_branch>>
46. 1) Dar checkout para a master (caso não esteja)
2) Criar uma branch nova a partir da master (feature/2)
3) Dar o push da branch nova para a nuvem
(disponibilizar uma branch nova na nuvem)
5
48. REBASE: realinha a história de uma branch em relação a sua branch base
(possívelmente o alvo para merge)
git rebase master
49. 1) Dar checkout para a master localmente
2) Criar uma branch nova a partir da mesma (feature/3)
3) Adicionar um arquivo novo com algum conteúdo
4) Realizar o commit deste arquivo
5) Dar checkout para a master
6) Realizar o merge da nova branch (feature/3) na master
7) Dar checkout para a feature/2
8) Realizar o rebase com a master
9) Dar push da feature/2 para a nuvem
(realizar o rebase)
10
50. TAGGING
- commit (hash)
- branch (HEAD)
- tag
3x CHECKOUT
TAG: marcar uma hash de uma maneira legível para humanos
51. TAG: realiza a listagem de tags (locais)
git tag
<<nome da tag>>: realiza a marcação da hash de commit com um nome
git tag <<nome_da_tag>>
PUSH <<nome_da_tag>>: disponibiliza a tag na nuvem
git push origin <<nome_da_tag>>
52. PULL REQUEST
● Envolve a branch base e a branch de
comparação
● Processo fornecido pelos serviços de
repositório
● Permite a comparação entre as branches
O QUE É?
53. 1) Dar push da master para a nuvem
2) Fazer checkout da master para uma nova branch (feature/4)
3) Modificar o conteúdo dos arquivos existentes na branch
4) Adicionar alguns arquivos e conteúdo dentro dos mesmos
5) Realizar o commit
6) Dar push da branch nova para a nuvem
7) Ir até o serviço de repositório remoto e criar o pull request
8) Validar as alterações e fazer o merge na modalidade fast-foward
9) Verificar os commits da master da nuvem e se certificar de que os
commits estão na mesma
(realizar merge através de pull request)
15
54. VERSIONAMENTO SEMÂNTICO
MAJOR: versão que marca uma quebra de compatibilidade com a anterior
MINOR: versão que adiciona uma funcionalidade que tem compatibilidade com a versão major
PATCH: versão que marca uma correção compatível com a versão minor
MAJOR.MINOR.PATCH
(v0.0.0)
55. FLUXOS DE TRABALHO
CENTRALIZED WORKFLOW
- Centrado na master
FEATURE BRANCH WORKFLOW
- Master é sagrada!
- Funcionalidades são
desenvolvidas em
branches separadas,
sem incomodar o código
principal
- Permite discussões
acerca da branch
GIT FLOW
- Foi apresentado por
Vincent Driessen
- Desenhado para as
releases de projeto
- Para gerenciar projetos
grandes
- Trabalha com duas
branches de longa vida:
master e develop
- Branches de vida curta:
feature, release e hotfix
58. FLUXOS DE TRABALHO
GIT FLOW (HOTFIX)
MASTER
DEVELOP
(v0.0.1)
COMMIT 3
HOTFIX/1
(v0.1.0)
COMMIT 3
59. FLUXOS DE TRABALHO
GIT FLOW (RELEASE)
MASTER
DEVELOP
(v0.0.1)
COMMIT 4
RELEASE/1(0.1.0)
(v0.1.0 ~ HEAD)
(v0.1.0 ~ HEAD)
60. FLUXOS DE TRABALHO
Perguntas:
“ Quando você está avaliando implementar
um
fluxo de trabalho para sua equipe, é mais
importante considerar a cultura da mesma.
Afinal, você quer implementar um
fluxo para
aumentar a efetividade da equipe e não para
ser um
fardo que limita a produtividade. “
- Este fluxo escala para o
tamanho da equipe?
- É simples desfazer os erros
com este fluxo?
- Este fluxo impõe qualquer
carga desnecessário para a
equipe?