Este projeto reúne os principais conceitos estudados no repositório em uma única jornada prática.
A proposta é simular o trabalho de uma pessoa desenvolvedora entrando em um projeto colaborativo.
Faça este projeto em um fork seu deste repositório. Assim você pode criar branches, commits e Pull Requests sem alterar o projeto original.
Você entrou em um projeto fictício chamado DevNotes.
Sua primeira tarefa é documentar um pequeno guia de boas práticas para pessoas novas no time.
Durante a tarefa, você deverá:
Fork
↓
Clone
↓
Configurar remotes
↓
Issue
↓
Branch
↓
Commits
↓
Atualizar branch
↓
Resolver conflito
↓
Push
↓
Pull Request
↓
Revisar diff
↓
Merge
↓
Limpeza
No GitHub, faça um fork deste repositório para sua própria conta.
Depois clone o seu fork:
git clone https://github.com/SEU-USUARIO/git-e-github.git
cd git-e-githubConfira:
git remote -vNeste momento, origin deve apontar para seu fork.
Adicione o projeto original como upstream:
git remote add upstream https://github.com/AlexLimaTKZ/git-e-github.gitConfira:
git remote -vModelo mental:
upstream → projeto original
origin → seu fork
Abra uma Issue no seu fork com o título:
Adicionar guia de boas práticas para novos devs
Use uma descrição semelhante a:
## Objetivo
Criar um pequeno guia de onboarding para novos membros do time.
## Critérios de aceite
- criar arquivo `projeto-final/entrega.md`;
- incluir pelo menos 5 boas práticas;
- usar Markdown;
- trabalhar em uma branch separada;
- abrir Pull Request antes de integrar na main.A Issue representa a tarefa antes da implementação.
Antes de começar:
git switch main
git fetch upstream
git merge upstream/mainDepois envie a atualização ao seu fork, se necessário:
git push origin maingit switch -c docs/onboarding-devsConfira:
git branchCrie:
projeto-final/entrega.md
Sugestão de estrutura:
# Guia de onboarding
## 1. Atualize sua branch antes de começar
...
## 2. Evite commits gigantes
...
## 3. Revise o diff antes do commit
...
## 4. Não envie segredos para o Git
...
## 5. Abra Pull Requests pequenos
...Não copie exatamente o exemplo. Escreva com suas próprias palavras.
git status
git diffDepois:
git add projeto-final/entrega.md
git diff --stagedSe estiver correto:
git commit -m "docs: adiciona guia de onboarding"Adicione ao arquivo uma seção chamada:
## Checklist antes de abrir um Pull RequestInclua pelo menos 4 itens.
Depois:
git diff
git add projeto-final/entrega.md
git commit -m "docs: adiciona checklist de pull request"Confira o histórico:
git log --oneline --graph --decorate --allSua branch deve estar pelo menos 2 commits ahead da main.
Agora vamos provocar uma situação comum de equipe.
Abra outro terminal ou use temporariamente a main:
git switch mainCrie um arquivo:
projeto-final/aviso.md
Conteúdo:
# Aviso
Antes de iniciar uma tarefa, consulte as regras do projeto.Faça commit:
git add projeto-final/aviso.md
git commit -m "docs: adiciona aviso do projeto final"
git push origin mainAgora volte para sua feature:
git switch docs/onboarding-devsVisualmente:
main A────M
\
feature B────C
Sua feature está:
ahead → possui B e C
behind → não possui M
git fetch origin
git merge origin/mainConfira:
git log --oneline --graph --decorate --allSua branch agora deve conter também o commit da main.
Esta etapa é propositalmente mais avançada.
Ainda em docs/onboarding-devs, acrescente ao final de projeto-final/aviso.md:
Priorize branches pequenas e fáceis de revisar.Faça commit:
git add projeto-final/aviso.md
git commit -m "docs: complementa aviso na feature"Troque para main:
git switch mainAltere a mesma linha do arquivo para:
Priorize Pull Requests pequenos e fáceis de revisar.Faça commit:
git add projeto-final/aviso.md
git commit -m "docs: complementa aviso na main"git switch docs/onboarding-devs
git merge mainO Git deverá indicar conflito.
Use:
git statusAbra projeto-final/aviso.md e procure:
<<<<<<< HEAD
...
=======
...
>>>>>>> main
Escolha uma versão final coerente, por exemplo:
Priorize branches e Pull Requests pequenos e fáceis de revisar.Remova os marcadores e conclua:
git add projeto-final/aviso.md
git commitConfira novamente:
git status
git log --oneline --graph --decorate --allgit push -u origin docs/onboarding-devsNo seu fork, abra:
docs/onboarding-devs → main
Use uma descrição parecida com:
## O que mudou
- adiciona guia de onboarding;
- adiciona checklist para Pull Requests;
- complementa aviso do projeto final.
## Como revisei
- conferi `git diff`;
- revisei os commits;
- resolvi conflito com a main;
- confirmei que a branch está atualizada.Antes do merge, abra a aba Files changed.
Procure por:
arquivos inesperados?
segredos?
texto duplicado?
marcadores de conflito?
nomes ruins?
alterações que não pertencem à tarefa?
Se encontrar algo errado, não abra outro PR.
Corrija na mesma branch:
git add .
git commit -m "docs: corrige revisao final"
git pushO PR será atualizado.
Depois da revisão, faça o merge no seu fork.
Em seguida:
git switch main
git pull origin mainExclua a branch local:
git branch -d docs/onboarding-devsCrie propositalmente um commit simples na main do seu fork:
echo "linha temporaria" >> projeto-final/aviso.md
git add projeto-final/aviso.md
git commit -m "docs: adiciona linha temporaria"Veja o hash:
git log --onelineDesfaça sem reescrever o histórico:
git revert HASH_DO_COMMITCompare:
commit errado continua no histórico
↓
novo commit registra a reversão
Você concluiu o projeto se conseguiu:
- fazer fork e clone;
- diferenciar
origineupstream; - criar uma Issue;
- criar branch a partir da
main; - fazer pelo menos dois commits claros;
- usar
status,diffediff --staged; - identificar branch ahead/behind;
- atualizar uma branch que ficou behind;
- resolver um conflito manualmente;
- fazer push de uma branch;
- abrir e revisar um Pull Request;
- atualizar o mesmo PR com novos commits;
- fazer merge;
- excluir uma branch concluída;
- usar
revertpara desfazer um commit.
Tente responder sem consultar as aulas:
- Qual a diferença entre Git e GitHub?
- Qual a diferença entre
add,commitepush? - Por que trabalhar em branch em vez de diretamente na
main? - O que significa uma branch estar
2 ahead / 1 behind? - Qual a diferença entre
fetchepull? - O que um Pull Request adiciona ao fluxo que um simples
pushnão adiciona? - Como você investigaria um
non-fast-forward? - Quando
revertcostuma ser mais seguro do que reescrever o histórico?
Se você consegue explicar essas respostas com suas próprias palavras e concluir o projeto sem copiar comandos mecanicamente, já formou uma base sólida para trabalhar com Git e GitHub em projetos reais.