Por Que Todo Programador Precisa Saber Git?
Imagine que você está desenvolvendo um projeto e, de repente, algo quebra. Sem Git, você teria que lembrar exatamente o que mudou e tentar desfazer manualmente. Com Git, você simplesmente volta para uma versão anterior funcionando. Simples assim!
Mas Git vai muito além de "desfazer mudanças". É a ferramenta que permite que milhares de desenvolvedores trabalhem no mesmo projeto sem pisar no pé um do outro. É usado por todas as empresas de tecnologia, de startups a gigantes como Google, Microsoft e Facebook.
"Git não é apenas uma ferramenta - é o padrão da indústria. Saber Git é tão essencial quanto saber programar."
O que você vai aprender?
- Diferença entre Git e GitHub
- Configuração e primeiros passos
- Workflow completo de desenvolvimento
- Branches e merge
- Resolução de conflitos
- Colaboração com GitHub
- Boas práticas profissionais
Git vs GitHub: Entendendo a Diferença
Git (Sistema Local)
Git é o sistema de controle de versão que roda no seu computador. Pense nele como um "álbum de fotos" do seu código, onde cada "foto" é uma versão salva do projeto.
Principais características:
- Funciona offline no seu computador
- Rastreia todas as mudanças no código
- Permite voltar para versões antigas
- Facilita trabalho em equipe
GitHub (Plataforma Online)
GitHub é uma plataforma de hospedagem para repositórios Git na nuvem. É como o Google Drive, mas específico para código.
Principais funcionalidades:
- Armazena código na nuvem
- Facilita colaboração em equipe
- Pull requests para revisão de código
- Issues para gerenciar tarefas
- GitHub Pages para hospedar sites
- Portfólio profissional para desenvolvedores
Analogia: Se Git é o Word no seu computador, GitHub é o Google Docs na nuvem.
Instalação e Configuração
Instalando Git
Windows: Baixe de git-scm.com e execute o instalador
Mac: Abra o Terminal e digite:
git --version
Se não estiver instalado, o Mac oferecerá instalação automática
Linux:
sudo apt-get update
sudo apt-get install git
Configuração Inicial
Depois de instalado, configure seu nome e email (serão usados nos commits):
git config --global user.name "Seu Nome"
git config --global user.email "seu@email.com"
# Verificar configuração
git config --list
Conceitos Fundamentais
Repositório (Repository)
É a "pasta do projeto" que o Git está rastreando. Contém todos os arquivos e o histórico de versões.
Commit
É um "ponto de salvamento" do projeto. Como tirar uma foto do estado atual dos arquivos.
Branch
É uma "linha paralela" de desenvolvimento. Permite trabalhar em features sem afetar o código principal.
Os Três Estados do Git
- Working Directory: Arquivos que você está editando
- Staging Area: Arquivos marcados para o próximo commit
- Repository: Commits salvos no histórico
Primeiros Passos: Criando seu Primeiro Repositório
Opção 1: Iniciar repositório local
# Criar pasta do projeto
mkdir meu-projeto
cd meu-projeto
# Inicializar Git
git init
# Verificar status
git status
Pronto! Você tem um repositório Git. O comando git init cria uma pasta oculta .git que guarda todo o histórico.
Opção 2: Clonar repositório existente
# Clonar repositório do GitHub
git clone https://github.com/usuario/projeto.git
# Entrar na pasta
cd projeto
Workflow Básico: Add, Commit, Push
1. Criar ou modificar arquivos
# Criar arquivo
echo "# Meu Projeto" > README.md
# Ver status
git status
O Git mostrará que README.md é um arquivo não rastreado (untracked).
2. Adicionar ao Staging (git add)
# Adicionar arquivo específico
git add README.md
# Adicionar todos os arquivos modificados
git add .
# Adicionar múltiplos arquivos
git add arquivo1.js arquivo2.js
# Ver status novamente
git status
Agora o arquivo está staged (pronto para commit).
3. Fazer Commit (git commit)
# Commit com mensagem
git commit -m "Adiciona README inicial"
# Ver histórico
git log
# Ver histórico resumido
git log --oneline
Mensagem de commit ideal:
- Breve e descritiva (50 caracteres ou menos)
- Use verbo no imperativo: "Adiciona", "Corrige", "Remove"
- Explique O QUE e POR QUE, não COMO
Exemplos bons:
- "Adiciona validação de email no formulário"
- "Corrige bug no cálculo de desconto"
- "Remove código não utilizado da API"
Exemplos ruins:
- "update" (vago demais)
- "alteracoes" (não explica o que)
- "teste123" (não tem significado)
Trabalhando com GitHub: Push e Pull
Conectando ao GitHub
Primeiro, crie um repositório no GitHub (github.com):
- Clique em "New repository"
- Dê um nome
- Clique em "Create repository"
Depois, conecte seu repositório local:
# Adicionar remote
git remote add origin https://github.com/seu-usuario/seu-repo.git
# Verificar remote
git remote -v
# Enviar código (primeira vez)
git push -u origin main
# Próximos pushes
git push
Baixando atualizações (git pull)
# Baixar e mesclar mudanças
git pull origin main
# Ou simplesmente
git pull
Branches: Trabalhando em Paralelo
Branches permitem desenvolver features sem bagunçar o código principal.
Criando e navegando entre branches
# Listar branches
git branch
# Criar nova branch
git branch feature-login
# Mudar para branch
git checkout feature-login
# Criar e mudar ao mesmo tempo (recomendado)
git checkout -b feature-carrinho
# Deletar branch
git branch -d feature-login
Workflow com Branches
# 1. Criar branch para feature
git checkout -b feature-pagamento
# 2. Fazer modificações e commits
git add .
git commit -m "Implementa gateway de pagamento"
# 3. Enviar branch para GitHub
git push -u origin feature-pagamento
# 4. Voltar para main
git checkout main
# 5. Fazer merge da feature
git merge feature-pagamento
# 6. Deletar branch local
git branch -d feature-pagamento
# 7. Deletar branch remota
git push origin --delete feature-pagamento
Resolvendo Conflitos
Conflitos acontecem quando duas pessoas editam a mesma linha de código.
Identificando conflito
git merge feature-x
# CONFLICT (content): Merge conflict in arquivo.js
Arquivo com conflito
function calcular() {
<<<<<<< HEAD
return valor * 2;
=======
return valor * 3;
>>>>>>> feature-x
}
Como resolver:
- Abra o arquivo
- Escolha qual versão manter (ou combine ambas)
- Remova as marcações <<<<, ====, >>>>
- Salve o arquivo
- Add e commit
git add arquivo.js
git commit -m "Resolve conflito no cálculo"
Comandos Essenciais para o Dia a Dia
Desfazer mudanças
# Desfazer mudanças não staged
git checkout -- arquivo.txt
# Desfazer git add (unstage)
git reset arquivo.txt
# Desfazer último commit (mantém mudanças)
git reset --soft HEAD~1
# Desfazer último commit (descarta mudanças)
git reset --hard HEAD~1
Ver diferenças
# Diferenças não staged
git diff
# Diferenças staged
git diff --staged
# Diferenças entre branches
git diff main feature-x
Histórico e log
# Log completo
git log
# Log resumido
git log --oneline
# Log gráfico
git log --graph --oneline --all
# Log de um arquivo específico
git log -- arquivo.js
GitHub: Pull Requests e Colaboração
Workflow Profissional
- Fork: Copie o repositório para sua conta
- Clone: Baixe para seu computador
- Branch: Crie branch para sua feature
- Commit: Faça commits com mensagens claras
- Push: Envie para seu fork
- Pull Request: Solicite merge no projeto original
- Code Review: Aguarde revisão e faça ajustes
- Merge: Seu código é integrado!
Criando Pull Request
- No GitHub, vá para seu fork
- Clique em "Pull Requests" → "New Pull Request"
- Selecione sua branch
- Escreva título e descrição detalhada
- Clique em "Create Pull Request"
.gitignore: Ignorando Arquivos
Alguns arquivos não devem ir para o Git (node_modules, .env, etc).
Crie arquivo .gitignore na raiz do projeto:
# Node.js
node_modules/
npm-debug.log
.env
# Python
__pycache__/
*.pyc
venv/
.env
# IDEs
.vscode/
.idea/
*.swp
# Sistema Operacional
.DS_Store
Thumbs.db
# Logs
*.log
logs/
Dicas e Boas Práticas
Commits
- Faça commits pequenos e frequentes
- Um commit = uma mudança lógica
- Teste antes de commitar
- Mensagens claras e descritivas
Branches
- Uma branch por feature
- Mantenha branches atualizadas com main
- Delete branches após merge
- Nomes descritivos: feature/login, fix/bug-123
Segurança
- NUNCA commite senhas, tokens ou chaves
- Use .gitignore para .env
- Use variáveis de ambiente
- Revise código antes de push
Comandos Avançados
Git Stash: Guardar mudanças temporariamente
# Guardar mudanças
git stash
# Ver stashes
git stash list
# Recuperar última stash
git stash pop
# Aplicar stash específica
git stash apply stash@{0}
Git Rebase: Reescrever histórico
# Rebase interativo (últimos 3 commits)
git rebase -i HEAD~3
# Atualizar branch com main
git checkout feature-x
git rebase main
Git Cherry-pick: Aplicar commit específico
git cherry-pick abc123
Recursos para Praticar
- Learn Git Branching: learngitbranching.js.org (tutorial interativo)
- GitHub Learning Lab: Cursos práticos oficiais
- Git Immersion: Tour guiado pelo Git
- Oh My Git!: Jogo para aprender Git
Conclusão: Git pode parecer complexo no início, mas com prática se torna natural. Comece usando os comandos básicos (add, commit, push) e vá aprendendo mais conforme necessário. O importante é começar!