🔀 Controle de Versão

Git & GitHub

Aprenda a controlar versões do seu código, trabalhar em equipe e contribuir para projetos open source com Git e GitHub.

50+ Comandos
100M+ Devs usam Git
Repositórios

📖 O que é Git?

🔄

Controle de Versão

Git é um sistema de controle de versão distribuído criado por Linus Torvalds em 2005. Ele rastreia mudanças no código, permitindo voltar a versões anteriores.

👥

Trabalho em Equipe

Permite que múltiplos desenvolvedores trabalhem no mesmo projeto simultaneamente, sem conflitos, através de branches e merges.

🌐

GitHub

GitHub é uma plataforma de hospedagem de código que usa Git. Oferece colaboração, issues, pull requests e muito mais.

📦

Repositório

Um repositório (repo) é uma pasta onde o Git rastreia todas as mudanças. Pode ser local (no seu PC) ou remoto (GitHub).

⬇️ Instalação do Git

1

Baixe o instalador

Acesse git-scm.com e baixe a versão para Windows.

2

Execute o instalador

Aceite as configurações padrão (recomendado para iniciantes).

3

Verifique a instalação

git --version
1

Via Homebrew (recomendado)

brew install git
2

Ou via Xcode Command Line Tools

xcode-select --install
1

Ubuntu/Debian

sudo apt-get install git
2

Fedora

sudo dnf install git

⚙️ Configuração Inicial

Antes de começar a usar o Git, configure seu nome e email. Essas informações aparecerão em cada commit que você fizer.

Configurar seu nome

git config --global user.name "Seu Nome"

Configurar seu email

git config --global user.email "seu@email.com"

Ver configurações

git config --list

Definir editor padrão (VS Code)

git config --global core.editor "code --wait"

🚀 Comandos Básicos

git init Inicializar

Cria um novo repositório Git na pasta atual.

git init
💡 Isso cria uma pasta oculta .git que contém todo o histórico.
git clone Clonar

Copia um repositório remoto para sua máquina.

git clone https://github.com/usuario/repo.git
💡 Você pode clonar via HTTPS ou SSH.
git status Verificar

Mostra o estado atual do repositório.

git status
💡 Use frequentemente para ver arquivos modificados, staged e untracked.
git add Adicionar

Adiciona arquivos à área de staging.

# Adicionar um arquivo específico git add arquivo.txt # Adicionar todos os arquivos git add . # Adicionar por padrão git add *.js
git commit Salvar

Salva as alterações em um ponto na história.

# Commit com mensagem git commit -m "Mensagem descritiva" # Adicionar e commitar juntos git commit -am "Mensagem"
💡 Escreva mensagens claras e descritivas!
git push Enviar

Envia commits locais para o repositório remoto.

# Push para origin main git push origin main # Push com upstream (primeira vez) git push -u origin main
git pull Baixar

Baixa e integra mudanças do repositório remoto.

git pull origin main
💡 Equivale a git fetch + git merge.
git log Histórico

Mostra o histórico de commits.

# Log completo git log # Log resumido git log --oneline # Log com gráfico git log --oneline --graph --all

🌿 Trabalhando com Branches

Branches permitem desenvolver features, corrigir bugs ou experimentar ideias em isolamento, sem afetar a branch principal.

main
feature-b
git branch Criar/Listar
# Listar branches git branch # Criar nova branch git branch nome-da-branch # Deletar branch git branch -d nome-da-branch
git checkout / git switch Mudar
# Mudar para branch existente git checkout nome-da-branch git switch nome-da-branch # Criar e mudar git checkout -b nova-branch git switch -c nova-branch
git merge Mesclar
# Primeiro, vá para a branch de destino git checkout main # Depois, faça o merge git merge nome-da-feature
git rebase Rebase
# Rebase da branch atual na main git rebase main # Rebase interativo git rebase -i HEAD~3
⚠️ Cuidado: não faça rebase em branches públicas!

↩️ Desfazendo Mudanças

📝

Arquivo modificado (não staged)

Descartar mudanças em um arquivo que ainda não foi adicionado ao stage.

git checkout -- arquivo.txt # ou git restore arquivo.txt
📦

Arquivo no stage (não commitado)

Remover arquivo da área de staging, mantendo as mudanças.

git reset HEAD arquivo.txt # ou git restore --staged arquivo.txt
💾

Último commit (local)

Modificar o último commit (mensagem ou arquivos).

# Mudar mensagem do último commit git commit --amend -m "Nova mensagem" # Adicionar arquivos ao último commit git add arquivo.txt git commit --amend --no-edit
🔄

Reverter commit (público)

Criar um novo commit que desfaz um commit específico.

git revert <hash-do-commit>

Reset para commit anterior

Voltar o repositório para um estado anterior.

# Soft: mantém mudanças no stage git reset --soft HEAD~1 # Mixed: mantém mudanças, remove do stage git reset --mixed HEAD~1 # Hard: descarta todas as mudanças git reset --hard HEAD~1
⚠️ --hard é perigoso! Use com cuidado.
🗑️

Stash (guardar temporariamente)

Salvar mudanças temporariamente para trabalhar em outra coisa.

# Guardar mudanças git stash # Listar stashes git stash list # Recuperar último stash git stash pop # Recuperar stash específico git stash apply stash@{0}

🌐 Repositórios Remotos

git remote Gerenciar
# Listar remotos git remote -v # Adicionar remoto git remote add origin https://github.com/user/repo.git # Remover remoto git remote remove origin # Renomear remoto git remote rename origin upstream
git fetch Baixar

Baixa mudanças do remoto sem mesclar.

# Baixar de todos os remotos git fetch --all # Baixar de origin git fetch origin
Fork & Pull Request Contribuir
# 1. Fork o repositório no GitHub # 2. Clone seu fork git clone https://github.com/SEU-USER/repo.git # 3. Adicione o original como upstream git remote add upstream https://github.com/ORIGINAL/repo.git # 4. Crie uma branch git checkout -b minha-feature # 5. Faça mudanças e commit git commit -m "Minha contribuição" # 6. Push para seu fork git push origin minha-feature # 7. Abra um Pull Request no GitHub

🙈 .gitignore

O arquivo .gitignore especifica quais arquivos e pastas o Git deve ignorar. Coloque-o na raiz do projeto.

📁 Exemplo para Node.js

# Dependências node_modules/ # Logs logs/ *.log npm-debug.log* # Ambiente .env .env.local # Build dist/ build/ # Sistema .DS_Store Thumbs.db # IDE .vscode/ .idea/

📁 Exemplo para Python

# Byte-compiled __pycache__/ *.py[cod] *$py.class # Virtual environments venv/ env/ .venv/ # IDEs .idea/ .vscode/ *.swp *.swo # Testes .pytest_cache/ .coverage htmlcov/ # Distribuição dist/ build/ *.egg-info/
💡

Visite gitignore.io para gerar .gitignore para qualquer linguagem/framework!

Boas Práticas

📝

Mensagens de Commit

  • Use verbos no imperativo: "Add", "Fix", "Update"
  • Seja claro e conciso
  • Limite a 50-72 caracteres na primeira linha
  • Explique o "porquê" no corpo do commit
✅ feat: add user authentication ✅ fix: resolve login redirect issue ✅ docs: update README with install guide ❌ fixed stuff ❌ changes ❌ asdfgh
🌿

Estratégia de Branches

  • main - código em produção
  • develop - desenvolvimento ativo
  • feature/* - novas funcionalidades
  • bugfix/* - correções de bugs
  • hotfix/* - correções urgentes
🔄

Workflow Recomendado

  1. Pull as últimas mudanças
  2. Crie uma branch para sua feature
  3. Faça commits pequenos e frequentes
  4. Push e abra um Pull Request
  5. Code review e merge
⚠️

O que Evitar

  • Nunca commitar secrets ou senhas
  • Evite commits gigantes
  • Não faça --force em branches públicas
  • Não ignore conflitos de merge
  • Evite rebase em branches compartilhadas

📋 Cheat Sheet

🚀 Começando

git init Criar repositório
git clone <url> Clonar repositório

📝 Básicos

git status Ver estado
git add . Adicionar tudo
git commit -m "" Commitar
git push Enviar
git pull Baixar e mesclar

🌿 Branches

git branch Listar branches
git branch <nome> Criar branch
git checkout <nome> Mudar branch
git merge <nome> Mesclar branch
git branch -d <nome> Deletar branch

↩️ Desfazer

git restore <file> Descartar mudanças
git reset HEAD~1 Desfazer commit
git revert <hash> Reverter commit
git stash Guardar mudanças

📊 Histórico

git log Ver histórico
git log --oneline Log resumido
git diff Ver diferenças
git show <hash> Ver commit

🌐 Remotos

git remote -v Listar remotos
git fetch Baixar mudanças
git push -u origin main Primeiro push