Controle de versão do zero — edição Linux
Nota
Não é necessária experiência prévia. Se você consegue abrir um terminal, já está pronto.
Git é um sistema de controle de versão — ele registra cada mudança que você faz nos seus arquivos ao longo do tempo.
Pense nele como um sistema de save de um videogame, mas para código:
Dica
Git ≠ GitHub. Git é a ferramenta. GitHub é um site que hospeda seus repositórios Git online.
Sem Git
project_final.pyproject_final_v2.pyproject_FINAL_USE_THIS.pyproject_FINAL_fixed.pyproject_FINAL_fixed2_omg.pyCom Git
project.pyAbra um terminal e execute o comando da sua distro:
Ubuntu / Debian / Mint
Fedora / RHEL / CentOS
Arch / Manjaro
Verifique a instalação:
Antes de usar o Git, diga a ele quem você é. Essa informação é anexada a cada commit que você fizer.
Defina seu editor de texto preferido (para as mensagens de commit):
# Usar o VS Code
git config --global core.editor "code --wait"
# Usar o nano (o mais simples para iniciantes)
git config --global core.editor "nano"
# Usar o vim
git config --global core.editor "vim"Confira sua configuração:
| Conceito | O que significa |
|---|---|
| Repository (repo) | Uma pasta rastreada pelo Git |
| Working directory | Seus arquivos como você os vê |
| Staging area | Mudanças selecionadas para o próximo commit |
| Commit | Uma foto salva das suas mudanças em staging |
| Branch | Uma linha independente de desenvolvimento |
| Remote | Uma cópia do repo hospedada online (GitHub, etc.) |
┌─────────────────────────────────────────────────────┐
│ YOUR PROJECT │
│ │
│ ┌─────────────┐ git add ┌──────────────┐ │
│ │ Working │ ────────► │ Staging │ │
│ │ Directory │ │ Area │ │
│ └─────────────┘ └──────┬───────┘ │
│ ▲ │ git commit │
│ │ ▼ │
│ │ ┌──────────────┐ │
│ └──────────────────│ Repository │ │
│ git checkout │ (History) │ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────┘
Nota
git add ainda não salva nada — apenas prepara as mudanças. git commit é o save de verdade.
Opção A — Começar do zero (projeto novo)
Isso cria uma pasta oculta .git/ — é onde o Git guarda tudo.
Opção B — Clonar um repo existente do GitHub
git clone https://github.com/username/repository.git
# Clonar em uma pasta com nome específico
git clone https://github.com/username/repository.git my-folderConfira o status do seu repo a qualquer momento:
Passo 1: Crie ou modifique um arquivo
Passo 2: Veja o que o Git enxerga
Passo 3: Coloque o arquivo em staging
Passo 4: Faça o commit com uma mensagem
Uma boa mensagem de commit diz o que mudou e por quê, não como.
❌ Mensagens ruins
fixstuffchangesasdfghfinalfinal for real✅ Mensagens boas
Add login form validationFix crash when user list is emptyRemove deprecated API callsUpdate README with install stepsDica
Use o modo imperativo: “Add feature” em vez de “Added feature”.
Ver todos os commits:
Visão compacta de uma linha (bem mais agradável):
git log --oneline
# a3f1c2d Add login form
# 9b2e81a Fix crash on empty list
# 4c7a012 Initial commitVer o que realmente mudou em cada commit:
Ver mudanças que ainda não estão em staging:
Ver mudanças já em staging:
Tirar um arquivo do staging (mantendo suas edições):
Descartar todas as edições de um arquivo (voltar ao último commit):
Aviso
git restore filename.py descarta permanentemente as mudanças não salvas. Não há como desfazer.
Desfazer o último commit (mantendo os arquivos intactos):
Corrigir a mensagem do último commit:
Um branch é uma cópia independente do seu projeto onde você pode trabalhar livremente sem afetar o código principal.
main ──●──●──●──────────────●──▶
\ /
feature ●──●──●──●──
Criar e mudar para um branch novo:
Listar todos os branches:
Alternar entre branches:
Deletar um branch (depois do merge):
Quando sua feature estiver pronta, faça o merge dela de volta na main:
# 1. Mude para o branch de destino
git switch main
# 2. Faça o merge do branch feature nele
git merge feature/loginSe não houver conflitos, o Git faz o merge automaticamente.
Se houver um conflito, o Git marca o arquivo afetado:
<<<<<<< HEAD
print("Hello from main")
=======
print("Hello from feature")
>>>>>>> feature/login
Edite o arquivo para manter o que quiser, remova os marcadores, e então:
Adicionar um remote ao seu repo local:
Conferir seus remotes:
Fazer push dos seus commits para o GitHub pela primeira vez:
Fazer push depois da primeira vez:
Trazer as últimas mudanças do GitHub:
# 1. Traga as últimas mudanças dos colegas de equipe
git pull
# 2. Crie um branch para sua tarefa
git switch -c feature/my-task
# 3. Faça seu trabalho... edite arquivos...
# 4. Veja o que mudou
git status
git diff
# 5. Coloque em staging e faça commit
git add .
git commit -m "Implement my task"
# 6. Faça push para o GitHub
git push -u origin feature/my-task
# 7. Abra um Pull Request no GitHub e peça revisão.gitignoreDiga ao Git para ignorar arquivos que você nunca quer commitar (segredos, logs, artefatos de build):
Exemplo de .gitignore para um projeto Python:
# Python
__pycache__/
*.pyc
*.pyo
.venv/
venv/
*.egg-info/
# Variáveis de ambiente (NUNCA commite estas!)
.env
# Arquivos do editor
.vscode/
.idea/
# Arquivos do sistema operacional
.DS_Store
Thumbs.db
Em vez de digitar sua senha a cada push, use uma chave SSH:
Passo 1: Gere um par de chaves
Passo 2: Copie sua chave pública
Passo 3: Adicione-a ao GitHub
GitHub → Settings → SSH and GPG keys → New SSH key → Paste → Save
Passo 4: Teste a conexão
Passo 5: Use URLs SSH em vez de HTTPS
| Comando | O que faz |
|---|---|
git init |
Inicia um repo novo |
git clone <url> |
Copia um repo remoto localmente |
git status |
Mostra o estado atual |
git add . |
Coloca todas as mudanças em staging |
git commit -m "msg" |
Salva uma foto |
git log --oneline |
Vê o histórico de commits |
git push |
Envia para o remote |
git pull |
Baixa do remote |
git switch -c <name> |
Cria e muda de branch |
git merge <branch> |
Faz merge de um branch |
git restore <file> |
Descarta mudanças de um arquivo |
git diff |
Mostra mudanças não salvas em staging |
“Fiz commit na main por acidente”
git reset --soft HEAD~1 # Desfaz o commit, mantém as mudanças em staging
git switch -c feature/oops # Move o trabalho para um branch novo“Apaguei um arquivo por acidente”
“Preciso ver como o projeto estava 3 commits atrás”
git log --oneline # Encontre o hash do commit
git checkout a3f1c2d # Dê uma olhada (somente leitura)
git switch main # Volte“Meu push foi rejeitado”
O fluxo de ouro
git pull — sincronize primeirogit switch -c branch — trabalhe isoladogit add . → git commitgit push — compartilhe seu trabalhoAs regras de ouro
.env ou segredosgit status é seu melhor amigoDica
A melhor forma de aprender Git é usá-lo todos os dias, mesmo em projetos pessoais. Quebre coisas, recupere-as — é assim que você realmente entende.