⬡ Controle de Versão

Git

Do init ao rebase — tudo que você precisa saber sobre Git

📖 O que é Git?

Git é um sistema de controle de versão distribuído criado por Linus Torvalds em 2005. Ele rastreia mudanças no código, permite colaboração entre times e mantém o histórico completo do projeto.

📸

Snapshots, não diffs

Git armazena snapshots do estado completo dos arquivos a cada commit, não apenas as diferenças.

🌐

Distribuído

Cada desenvolvedor tem uma cópia completa do repositório — trabalhe offline sem problemas.

🔒

Integridade SHA-1

Todo objeto Git é identificado por um hash SHA-1 — impossível alterar histórico sem detecção.

Branches baratos

Criar uma branch em Git é instantâneo — apenas um ponteiro para um commit.

Instalação e Configuração

bash
# Ubuntu/Debian
sudo apt install git

# macOS
brew install git

# Configuração inicial (obrigatória)
git config --global user.name "Seu Nome"
git config --global user.email "seu@email.com"
git config --global core.editor "code --wait"
git config --global init.defaultBranch main

# Verificar configuração
git config --list

⚡ Comandos Essenciais

Os comandos que você vai usar todos os dias.

bash — ciclo básico
# Iniciar repositório
git init

# Clonar repositório existente
git clone https://github.com/user/repo.git

# Ver status dos arquivos
git status

# Adicionar ao staging
git add arquivo.txt          # arquivo específico
git add .                    # todos os arquivos
git add -p                  # interativo (recomendado)

# Criar commit
git commit -m "feat: adiciona login com OAuth"

# Ver histórico
git log --oneline --graph --all

# Enviar para remoto
git push origin main

# Baixar atualizações
git pull origin main
💡 Conventional Commits

Use prefixos padronizados: feat:, fix:, docs:, chore:, refactor:, test:. Facilita changelogs automáticos e leitura do histórico.


🌿 Branches & Merge

Branches permitem desenvolver features isoladas sem afetar o código principal.

bash — branches
# Criar e mudar para nova branch
git checkout -b feature/login

# Listar branches
git branch -a

# Merge (integra branch na atual)
git checkout main
git merge feature/login

# Merge sem fast-forward (preserva histórico)
git merge --no-ff feature/login

# Deletar branch após merge
git branch -d feature/login
git push origin --delete feature/login
⚠️ Conflitos de Merge

Quando dois branches editam a mesma linha, Git marca o conflito com <<<<<<<. Edite o arquivo, remova os marcadores e faça git add + git commit para resolver.


🚀 Comandos Avançados

Rebase, stash, cherry-pick e outras ferramentas poderosas.

bash — avançado
# Rebase — reescreve histórico linearmente
git rebase main
git rebase -i HEAD~3       # interativo: squash, reword, drop

# Stash — salva trabalho temporariamente
git stash
git stash pop
git stash list

# Cherry-pick — aplica commit específico
git cherry-pick a1b2c3d

# Desfazer último commit (mantém arquivos)
git reset --soft HEAD~1

# Reverter commit público (seguro)
git revert a1b2c3d

# Ver quem alterou cada linha
git blame arquivo.js

# Buscar commit que introduziu bug
git bisect start
git bisect bad
git bisect good v1.0
🔴 Regra de Ouro do Rebase

Nunca faça rebase em branches públicas/compartilhadas. Use rebase apenas em branches locais antes de fazer push.


🔄 Fluxos de Trabalho

Estratégias de branching para times de diferentes tamanhos.

🌊

Git Flow

Branches: main, develop, feature/*, release/*, hotfix/*. Ideal para projetos com releases versionadas.

🛣️

Trunk-Based Development

Todos commitam direto na main com feature flags. Ideal para CI/CD contínuo e times ágeis.

🍴

GitHub Flow

Branch por feature + Pull Request para main. Simples e eficaz para a maioria dos projetos.

🦊

GitLab Flow

Combina feature branches com environment branches (staging, production). Ótimo para deploys controlados.


📋 Cheat Sheet Completo

Referência rápida dos comandos mais usados.

ComandoO que faz
git initInicializa repositório Git no diretório atual
git clone <url>Clona repositório remoto localmente
git statusMostra estado dos arquivos (staged, modified, untracked)
git add -pAdiciona mudanças interativamente (recomendado)
git commit -m ""Cria commit com mensagem
git log --onelineHistórico compacto de commits
git diffMostra diferenças não staged
git diff --stagedMostra diferenças staged (prontas para commit)
git branch -b <nome>Cria e muda para nova branch
git merge <branch>Integra branch na branch atual
git rebase <branch>Reaplica commits sobre outra base
git stashSalva mudanças temporariamente
git stash popRestaura último stash
git reset --soft HEAD~1Desfaz último commit, mantém arquivos staged
git revert <hash>Cria commit que reverte outro (seguro para remoto)
git cherry-pick <hash>Aplica commit específico na branch atual
git tag v1.0.0Cria tag no commit atual
git remote -vLista repositórios remotos configurados
git fetch --allBaixa todas as atualizações sem fazer merge
← Voltar ao Hub Próximo: GitHub →

🎮 Git Playground

Pratique comandos Git diretamente no browser — sem instalar nada. O repositório é simulado em memória.

git playground — /repo
Comandos disponíveis: git initgit statusgit addgit commit git loggit branchgit checkoutgit merge git diffgit stashtouchecholsclear
$
📤 Compartilhar: