Skip to main content

Git e Controle de Versão

Por Que Precisamos de Controle de Versão?

Imagine que você está trabalhando em um projeto e faz uma mudança que quebra tudo. Ou talvez você queira voltar para uma versão anterior do código que funcionava perfeitamente. Ou ainda, você está trabalhando em equipe e precisa coordenar mudanças de várias pessoas sem perder trabalho ou criar conflitos.

Esses são problemas comuns que todo desenvolvedor enfrenta. A solução é o controle de versão - um sistema que rastreia mudanças no código ao longo do tempo, permite voltar para versões anteriores, e facilita trabalho em equipe.

Sem controle de versão, desenvolvedores frequentemente criam cópias como script.js, script-backup.js, script-old.js, script-final.js, script-final-v2.js. Isso rapidamente se torna um pesadelo de organização!

O Que é Git?

Git é o sistema de controle de versão mais popular do mundo. Foi criado por Linus Torvalds (o criador do Linux) em 2005 e se tornou o padrão da indústria.

Git funciona criando "snapshots" (fotografias) do seu código em diferentes momentos. Cada snapshot é chamado de commit e contém informações sobre o que mudou, quando mudou, e quem fez a mudança. Esses commits formam uma linha do tempo do seu projeto.

Conceitos Fundamentais

Repositório (Repository)

Uma pasta que contém seu projeto e todo o histórico de mudanças. Pode ser local (no seu computador) ou remoto (GitHub, GitLab).

Commit

Um snapshot do seu código em um momento específico. É como tirar uma foto do estado atual do projeto. Cada commit tem uma mensagem que descreve o que foi mudado.

Branch (Ramificação)

Branches permitem trabalhar em diferentes versões do projeto simultaneamente. Você pode ter uma branch principal (main) e criar branches para novas funcionalidades ou correções.

Merge (Mesclagem)

O processo de combinar mudanças de uma branch em outra.

Remote (Remoto)

Uma versão do seu repositório hospedada em outro lugar (GitHub, GitLab, Bitbucket).

Instalando e Configurando Git

Instalação

  • Windows: Baixe do git-scm.com
  • Mac: Geralmente já vem instalado, ou instale via brew install git
  • Linux: sudo apt install git (Ubuntu/Debian)

Configuração Inicial

git config --global user.name "Seu Nome"
git config --global user.email "seu.email@exemplo.com"

Essas informações serão usadas em todos os seus commits.

Comandos Git Essenciais

Inicializando um Repositório

cd meu-projeto
git init

Isso cria um repositório Git na pasta atual.

Verificando o Status

git status

Mostra quais arquivos foram modificados, quais estão prontos para commit, e quais não estão sendo rastreados.

Adicionando Arquivos ao Stage

# Adicionar um arquivo específico
git add arquivo.js

# Adicionar todos os arquivos modificados
git add .

# Adicionar todos os arquivos de um tipo
git add *.js

Fazendo Commit

git commit -m "Mensagem descrevendo as mudanças"

Boas práticas para mensagens:

  • Use o imperativo: "Adiciona validação" ao invés de "Adicionei validação"
  • Seja específico: "Corrige bug no cálculo de desconto" ao invés de "Correções"
  • Mantenha curto (até 50 caracteres) para a primeira linha

Vendo o Histórico

# Histórico completo
git log

# Versão compacta
git log --oneline

# Histórico gráfico
git log --graph --oneline --all

Criando e Trabalhando com Branches

# Criar uma nova branch
git branch nome-da-branch

# Mudar para uma branch
git checkout nome-da-branch

# Criar e mudar para uma branch (atalho)
git checkout -b nome-da-branch

# Ver todas as branches
git branch

# Deletar uma branch
git branch -d nome-da-branch

Fazendo Merge

# Você está na branch que vai receber as mudanças
git checkout main
git merge feature/nova-funcionalidade

Trabalhando com Repositórios Remotos

# Adicionar um remote
git remote add origin https://github.com/usuario/repositorio.git

# Ver remotes configurados
git remote -v

# Enviar commits para o remoto
git push origin main

# Baixar mudanças do remoto
git pull origin main

# Clonar um repositório existente
git clone https://github.com/usuario/repositorio.git

.gitignore: Excluindo Arquivos

Nem todos os arquivos devem ser versionados. Crie um arquivo .gitignore:

# Dependências
node_modules/
vendor/

# Arquivos de build
dist/
build/
*.min.js

# Arquivos de sistema
.DS_Store
Thumbs.db

# Arquivos de ambiente
.env
.env.local

# Logs
*.log
npm-debug.log*

Workflow Básico do Git

  1. Modificar arquivos: Edite seus arquivos normalmente
  2. Verificar status: git status para ver o que mudou
  3. Adicionar ao stage: git add . para preparar as mudanças
  4. Fazer commit: git commit -m "mensagem" para criar um snapshot
  5. Enviar para remoto: git push para compartilhar

GitHub: Colaboração e Portfólio

GitHub é uma plataforma que hospeda repositórios Git na nuvem. É muito mais que apenas armazenamento - é uma rede social para desenvolvedores.

Por Que Usar GitHub?

  1. Backup: Seu código está seguro na nuvem
  2. Colaboração: Fácil trabalhar em equipe
  3. Portfólio: Mostre seu trabalho para empregadores
  4. Aprendizado: Veja código de outros desenvolvedores
  5. Contribuições: Participe de projetos open source

Criando um Repositório no GitHub

  1. Acesse github.com e crie uma conta
  2. Clique em "New repository"
  3. Dê um nome ao repositório
  4. Escolha se será público ou privado
  5. Clique em "Create repository"
  6. Siga as instruções para conectar seu repositório local
git remote add origin https://github.com/seu-usuario/seu-repo.git
git branch -M main
git push -u origin main

Resolvendo Conflitos

Quando você trabalha em equipe, às vezes acontecem conflitos - duas pessoas modificam a mesma parte do código. Git marca esses conflitos:

<<<<<<< HEAD
seu código aqui
=======
código da outra pessoa aqui
>>>>>>> branch-outra-pessoa

Para resolver:

  1. Edite o arquivo e escolha qual código manter
  2. Remova as marcações <<<<<<<, =======, >>>>>>>
  3. Adicione e commit:
git add arquivo-com-conflito.js
git commit -m "Resolve conflito"

Comandos Úteis Adicionais

Ver Diferenças

# Ver diferenças não commitadas
git diff

# Ver diferenças de um arquivo específico
git diff arquivo.js

Desfazer Mudanças

# Desfazer mudanças em arquivos não commitados
git checkout -- arquivo.js

# Desfazer o último commit (mantém as mudanças)
git reset --soft HEAD~1

Stash (Guardar Temporariamente)

# Guardar mudanças temporariamente
git stash

# Aplicar mudanças guardadas
git stash pop

# Ver stashes
git stash list

Boas Práticas com Git

1. Faça Commits Frequentes e Pequenos

É melhor fazer muitos commits pequenos do que poucos commits grandes.

2. Escreva Mensagens Claras

# Bom
git commit -m "Adiciona validação de email no formulário de contato"

# Ruim
git commit -m "mudanças"

3. Use Branches para Funcionalidades

Não trabalhe diretamente na branch main. Crie branches para cada funcionalidade:

git checkout -b feature/login-autenticacao
# trabalha na funcionalidade
git checkout main
git merge feature/login-autenticacao

4. Mantenha a Branch Main Estável

A branch main deve sempre estar em um estado funcional.

5. Faça Pull Antes de Push

Sempre baixe as últimas mudanças antes de enviar as suas:

git pull origin main
git push origin main

6. Revise Seus Commits Antes de Push

Use git log para verificar seus commits antes de enviar.

Fluxo de Trabalho em Equipe

Feature Branch Workflow

  1. Crie uma branch para cada feature
  2. Desenvolva e commit nessa branch
  3. Faça push da branch
  4. Abra um Pull Request no GitHub
  5. Revise e discuta mudanças
  6. Faça merge quando aprovado
# Criar branch para feature
git checkout -b feature/nova-funcionalidade

# Desenvolver e fazer commits
git add .
git commit -m "Implementa nova funcionalidade"

# Enviar para GitHub
git push origin feature/nova-funcionalidade

# No GitHub: Criar Pull Request
# Após aprovação: Fazer merge

Próximos Passos

Git é uma ferramenta essencial que você usará diariamente. Pratique criando repositórios de teste, fazendo commits, criando branches, e enviando para o GitHub.

No próximo módulo, vamos explorar outras ferramentas essenciais do desenvolvedor!


Referências