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

  1. Working Directory: Arquivos que você está editando
  2. Staging Area: Arquivos marcados para o próximo commit
  3. 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):

  1. Clique em "New repository"
  2. Dê um nome
  3. 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:

  1. Abra o arquivo
  2. Escolha qual versão manter (ou combine ambas)
  3. Remova as marcações <<<<, ====, >>>>
  4. Salve o arquivo
  5. 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

  1. Fork: Copie o repositório para sua conta
  2. Clone: Baixe para seu computador
  3. Branch: Crie branch para sua feature
  4. Commit: Faça commits com mensagens claras
  5. Push: Envie para seu fork
  6. Pull Request: Solicite merge no projeto original
  7. Code Review: Aguarde revisão e faça ajustes
  8. Merge: Seu código é integrado!

Criando Pull Request

  1. No GitHub, vá para seu fork
  2. Clique em "Pull Requests" → "New Pull Request"
  3. Selecione sua branch
  4. Escreva título e descrição detalhada
  5. 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!