GitHub e Controle de Versão

Histórico de Código

Git permite rastrear todas as mudanças do seu código, facilitando colaboração e recuperação de versões anteriores.


🔄 O que é Git?

Definição

Sistema de controle de versões distribuído, usado principalmente no desenvolvimento de software, mas pode ser usado para registrar o histórico de edições de qualquer tipo de arquivo.

CaracterísticaDescrição
CriadorLinus Torvalds (para o kernel Linux)
TipoDistribuído
RepositórioHistórico completo em cada diretório de trabalho
IndependênciaNão depende de acesso a rede ou servidor central

Por que usar controle de versão?

Imagine que você está desenvolvendo um sistema e, na sexta-feira, o código funciona perfeitamente. Na segunda-feira, após algumas alterações, tudo para de funcionar. Sem controle de versão, você tentaria lembrar o que mudou. Com Git, basta consultar o histórico e reverter.

Analogia

O Git funciona como um “Ctrl+Z infinito” para o seu projeto inteiro, incluindo todos os arquivos e toda a equipe ao mesmo tempo.


🌐 O que é GitHub?

Plataforma Web

Sistema web que provê a hospedagem de repositórios Git. Assim não é preciso configurar nem manter um servidor.

O GitHub não é o mesmo que o Git. O Git é a ferramenta local de controle de versão. O GitHub é um serviço na nuvem que armazena repositórios Git e adiciona funcionalidades de colaboração: Pull Requests, Issues, Actions (CI/CD), Wikis e revisão de código.

ConceitoO que é
Repositório (repo)Pasta do projeto com todo o histórico Git
CloneCópia local de um repositório remoto
ForkCópia independente de um repo na sua conta GitHub
Pull Request (PR)Proposta de mesclagem de uma branch para outra
IssueRegistro de bug, tarefa ou sugestão de melhoria
BranchLinha de desenvolvimento paralela dentro do mesmo repo

Plataformas alternativas

Além do GitHub, existem o GitLab e o Bitbucket, que seguem o mesmo modelo. O GitHub é o mais popular, com mais de 100 milhões de desenvolvedores cadastrados (2026).


📥 Instalação

🔗 Downloads do Git

Verificar instalação:

git --version

⚙️ Configuração Inicial

Identificação

Antes de fazer commits, precisamos nos identificar:

git config --global user.email "fulano@gmail.com"
git config --global user.name "Fulano da Silva"

Atenção

Cuidado ao copiar e colar: não deixe espaços vazios no início do comando.

Você pode verificar as configurações salvas com:

git config --list

🗺️ Como o Git Funciona por Dentro

O Git organiza o trabalho em três áreas distintas na sua máquina local, mais o repositório remoto:

flowchart LR
    A[📁 Working Directory\nArquivos editados] -->|git add| B[📋 Staging Area\nArquivos preparados]
    B -->|git commit| C[🗄️ Repositório Local\nHistórico salvo]
    C -->|git push| D[☁️ Repositório Remoto\nGitHub]
    D -->|git pull| C
    D -->|git clone| A
ÁreaDescrição
Working DirectoryOnde você edita os arquivos normalmente
Staging Area (Index)Área de preparação: escolha o que vai entrar no próximo commit
Repositório LocalBanco de dados local com todo o histórico de commits
Repositório RemotoCópia no GitHub, acessível por toda a equipe

Por que existe a Staging Area?

Ela permite que você faça várias alterações em vários arquivos, mas escolha exatamente o que vai em cada commit. Commits precisos facilitam a leitura do histórico e a reversão de mudanças específicas.


🚀 Comandos Básicos

Inicialização

ComandoDescrição
git initInicializa um repositório Git vazio
git branch -M mainModifica nome da branch principal para main
git remote add origin URLCria conexão com repositório remoto
git remote -vLista as conexões remotas configuradas

Fluxo de Trabalho

ComandoDescrição
git add arquivoAdiciona arquivo ao staging
git add .Adiciona todos os arquivos modificados ao staging
git statusVisualiza o que está preparado para commit
git commit -m "mensagem"Salva alterações no repositório
git push -u origin mainEnvia alterações para repositório remoto
git pullBaixa e mescla alterações do remoto

Histórico e Inspeção

ComandoDescrição
git logLista todos os commits com autor, data e mensagem
git log --onelineLista commits em formato compacto (uma linha cada)
git log --oneline --graphExibe histórico com representação gráfica de branches
git diffMostra diferenças entre o working directory e o staging
git diff --stagedMostra diferenças entre o staging e o último commit
git show <hash>Exibe detalhes e diff de um commit específico

Desfazendo Alterações

ComandoDescrição
git restore arquivoDescarta alterações não commitadas em um arquivo
git restore --staged arquivoRemove arquivo do staging (sem perder alterações)
git revert <hash>Cria um novo commit que desfaz um commit anterior (seguro)

Cuidado com git reset --hard

Esse comando descarta commits E alterações locais de forma permanente. Para iniciantes, prefira sempre git revert, que é seguro e mantém o histórico intacto.


📋 Exemplo de Fluxo Completo

# 1. Navegar até a pasta do projeto
cd meu-projeto
 
# 2. Inicializar repositório
git init
 
# 3. Definir branch principal
git branch -M main
 
# 4. Conectar ao repositório remoto
git remote add origin https://github.com/usuario/repo.git
 
# 5. Adicionar arquivos
git add arquivo.py
 
# 6. Fazer commit
git commit -m "primeiro commit"
 
# 7. Enviar para o GitHub
git push -u origin main

🌿 Branches: Desenvolvimento em Paralelo

Branches (ramificações) permitem que você desenvolva funcionalidades novas sem afetar o código principal. A ideia é simples: crie uma branch, trabalhe nela com segurança e, quando estiver pronto, mescle de volta para a branch principal.

gitGraph
   commit id: "início do projeto"
   commit id: "funcionalidade base"
   branch feature/login
   checkout feature/login
   commit id: "tela de login"
   commit id: "validação de senha"
   checkout main
   branch feature/cadastro
   checkout feature/cadastro
   commit id: "formulário de cadastro"
   checkout main
   merge feature/login id: "merge: login pronto"
   merge feature/cadastro id: "merge: cadastro pronto"
   commit id: "versão 1.0"

Comandos de Branch

ComandoDescrição
git branchLista todas as branches locais
git branch nome-da-branchCria uma nova branch
git checkout nome-da-branchMuda para a branch indicada
git checkout -b nome-da-branchCria e já muda para a nova branch
git merge nome-da-branchMescla a branch indicada na branch atual
git branch -d nome-da-branchDeleta a branch local (após merge)
git push origin nome-da-branchEnvia a branch para o repositório remoto

Boas práticas para nomes de branch (2025-2026)

Use prefixos descritivos para facilitar a leitura:

  • feature/nome-da-funcionalidade - nova funcionalidade
  • fix/descricao-do-bug - correção de bug
  • chore/atualizar-dependencias - tarefas de manutenção

🔁 GitHub Flow: O Fluxo Mais Usado

O GitHub Flow é o modelo de trabalho mais adotado em equipes que fazem entregas contínuas. Ele é simples e eficiente:

flowchart TD
    A[🌿 Criar branch a partir da main] --> B[✏️ Fazer commits na branch]
    B --> C[📤 Fazer push da branch para o GitHub]
    C --> D[📬 Abrir Pull Request]
    D --> E{👀 Revisão de código}
    E -->|Aprovado| F[🔀 Merge na main]
    E -->|Alterações necessárias| B
    F --> G[🗑️ Deletar branch]

Regra de ouro: a branch main sempre contém código funcional e pronto para ser usado.


📬 Pull Requests: Colaboração com Qualidade

Um Pull Request (PR) é um pedido formal para que suas alterações sejam revisadas e mescladas na branch principal. É a principal ferramenta de colaboração no GitHub.

Boas práticas para PRs (2025-2026):

  • Mantenha o PR pequeno e focado em uma única tarefa
  • Escreva uma descrição clara do que foi feito e por que
  • Referencie a Issue relacionada usando Fixes #123 na descrição
  • Revise o próprio diff antes de abrir o PR
  • Responda aos comentários de revisão com objetividade

CI/CD integrado

Em projetos modernos, ao abrir um PR, testes automáticos são executados pelo GitHub Actions. O botão de merge só fica disponível se todos os testes passarem. Isso garante que nenhum código quebrado entre na branch principal.


🔍 Explorando o Histórico de um Projeto Real

Uma das melhores formas de aprender Git é explorando repositórios open source reais. Você pode navegar pelo histórico diretamente no GitHub (aba “Commits”) ou pelo terminal após clonar o projeto.

# Clonar um repositório open source
git clone https://github.com/torvalds/linux.git
 
# Ver histórico resumido
git log --oneline -20
 
# Ver o diff de um commit específico
git show abc1234
 
# Buscar commits por mensagem
git log --oneline --grep="fix bug"
 
# Ver quem alterou cada linha de um arquivo
git blame nome-do-arquivo.py

Projetos bons para explorar

  • freeCodeCamp/freeCodeCamp (plataforma educacional em JavaScript)
  • public-apis/public-apis (lista de APIs públicas, muitos commits simples e legíveis)
  • torvalds/linux (o próprio Linux, para ver commits de alto impacto)

🧪 Atividade 1: Criar repositório e publicar no GitHub

Objetivo: publicar seu primeiro código no GitHub do zero.

Passos:

  1. Crie uma conta no GitHub em github.com (se ainda não tiver).
  2. Crie um novo repositório clicando em “New repository”. Dê um nome, marque “Public” e clique em “Create repository”.
  3. No seu computador, crie uma pasta e um arquivo de texto:
mkdir meu-primeiro-repo
cd meu-primeiro-repo
echo "print('Olá, GitHub!')" > hello.py
  1. Inicialize o Git, conecte ao GitHub e envie:
git init
git add hello.py
git commit -m "primeiro commit: hello world"
git branch -M main
git remote add origin https://github.com/SEU_USUARIO/meu-primeiro-repo.git
git push -u origin main

Resultado observável: acesse https://github.com/SEU_USUARIO/meu-primeiro-repo no navegador e veja o arquivo hello.py publicado com a mensagem do commit exibida ao lado do arquivo.


🧪 Atividade 2: Criar uma branch e abrir um Pull Request

Objetivo: trabalhar em uma funcionalidade isolada e propor a integração via Pull Request.

Passos:

  1. Dentro do repositório da Atividade 1, crie uma nova branch:
git checkout -b feature/mensagem-personalizada
  1. Edite o arquivo hello.py para receber o nome do usuário:
nome = input("Qual é o seu nome? ")
print(f"Olá, {nome}! Bem-vindo ao GitHub.")
  1. Faça o commit e envie a branch para o GitHub:
git add hello.py
git commit -m "feature: mensagem de boas-vindas personalizada"
git push origin feature/mensagem-personalizada
  1. Acesse o repositório no GitHub. Uma faixa amarela aparecerá sugerindo “Compare & pull request”. Clique nela, escreva uma descrição do que foi feito e clique em “Create pull request”.

  2. Na aba “Files changed” do PR, observe as linhas verdes (adicionadas) e vermelhas (removidas).

  3. Clique em “Merge pull request” e depois “Confirm merge”.

Resultado observável: a branch main agora contém a versão atualizada do arquivo. A branch feature/mensagem-personalizada pode ser deletada com segurança. Você acaba de simular o fluxo de trabalho real de um desenvolvedor profissional.


🧪 Atividade 3: Explorar o histórico de um projeto open source real

Objetivo: ler o histórico de commits e entender um diff de um projeto real.

Passos:

  1. Clone o repositório de APIs públicas (pequeno e didático):
git clone https://github.com/public-apis/public-apis.git
cd public-apis
  1. Veja os últimos 15 commits em formato compacto:
git log --oneline -15
  1. Copie o hash de um commit que pareça interessante pela mensagem. Veja o diff completo desse commit:
git show <hash-do-commit>
  1. Leia o diff: linhas com + foram adicionadas, linhas com - foram removidas. Tente identificar o que o contribuidor alterou e por que, baseando-se na mensagem do commit.

  2. Volte ao GitHub e localize o mesmo commit na aba “Commits” do repositório. Compare a visualização do terminal com a visualização web.

Resultado observável: você consegue navegar pelo histórico completo de um projeto com milhares de commits, ler diffs reais e entender o que cada contribuidor fez. Essa habilidade é essencial em qualquer ambiente profissional de desenvolvimento.


📋 Tabela Resumo: Comandos por Fase do Trabalho

FaseComandoO que faz
Configurargit config --global user.name "..."Define seu nome
Configurargit config --global user.email "..."Define seu email
Iniciargit initCria repositório local
Iniciargit clone URLCopia repositório remoto
Trabalhargit statusMostra estado atual
Trabalhargit add .Prepara todos os arquivos
Trabalhargit commit -m "msg"Salva snapshot
Colaborargit pushEnvia para o remoto
Colaborargit pullBaixa do remoto
Branchesgit checkout -b nomeCria e muda de branch
Branchesgit merge nomeMescla branch
Históricogit log --onelineVê commits resumidos
Históricogit diffVê o que mudou
Históricogit show <hash>Inspeciona um commit

📚 Materiais e Referências

📺 Como usar Git e Github na prática: Guia para iniciantes | Mayk Brito

📺 O QUE É GIT E GITHUB? - definição e conceitos importantes 1/2

📺 COMO USAR GIT E GITHUB NA PRÁTICA! - desde o primeiro commit até o pull request! 2/2


📚 Fontes (2026)