Comandos Essenciais do Git
O conjunto de comandos Git para uso diário para equipes Python - do clone ao commit e push, mais os comandos de inspeção que tornam a depuração do histórico rápida.
Receita
git status -sb
git diff
git add pyproject.toml uv.lock src/
git commit -m "feat(billing): add tax line item [BILL-42]"
git push -u origin feat/bill-42-taxQuando usar isso:
- Iniciando trabalho em um branch de ticket
- Inspecionando alterações não commitadas antes da revisão
- Enviando branches de feature e abrindo PRs
- Consulta rápida de histórico quando o CI falha em
main
Exemplo de Trabalho
# Clonar e configurar identidade (uma vez por máquina)
git clone git@github.com:acme/billing-api.git
cd billing-api
git config user.name "Ada Lovelace"
git config user.email "ada@acme.com"
# Loop diário
git checkout main
git pull --rebase origin main
git checkout -b feat/bill-42-tax
# ... editar arquivos Python ...
uv lock # se as dependências mudaram
git add pyproject.toml uv.lock src/billing/tax.py tests/test_tax.py
git commit -m "feat(billing): add tax line item [BILL-42]"
git fetch origin
git rebase origin/main
git push -u origin feat/bill-42-taxO que isso demonstra:
status -sbcurto para resumo de branch e staging- Lockfile commitado com mudanças de dependência
- Rebase antes do push mantém o histórico linear
- ID do ticket na mensagem de commit para rastreabilidade
Mergulho Profundo
Como Funciona
- Árvore de trabalho - Arquivos no disco;
git addadiciona snapshots ao índice. - Commits - Snapshots imutáveis referenciados por SHA.
- Remotes -
origintipicamente GitHub/GitLab;fetchbaixa referências sem mesclar. - Branches - Ponteiros nomeados para commits;
HEADé o checkout atual.
Referência de Comandos
| Tarefa | Comando |
|---|---|
| O que mudou? | git status, git diff, git diff --staged |
| Histórico | git log --oneline -20, git log -p file.py |
| Desfazer staging | git restore --staged file.py |
| Descartar edições | git restore file.py |
| Stash WIP | git stash push -m "wip tax" |
| Atualizar branch | git pull --rebase origin main |
Notas Python
# Ver quem tocou por último em um teste falho
git blame tests/test_tax.py
# Encontrar commit que mudou a taxa VAT padrão
git log -S "DEFAULT_VAT" --oneline -- src/Armadilhas
git add .pega segredos -.envescapa para commits. Correção:.gitignore+git add -ppara repositórios sensíveis.- Commit sem lockfile - CI
uv sync --frozenfalha. Correção: sempreuv lockcom edições depyproject.toml. - Pull com commits de merge em features - Histórico barulhento. Correção:
pull --rebaseem branches privados. - Force push em branches compartilhados - Reescreve o histórico da equipe. Correção:
--force-with-leaseapenas em seufeat/*antes da revisão. - Adição acidental enorme -
.venv/ou__pycache__/. Correção: gitignore global para artefatos Python. - Ruído de commit vazio - Commits "WIP" antes do push. Correção:
git commit --amendou squash antes do PR.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| GitHub Desktop / GitKraken | Preferência por diff visual | Fluxos de trabalho de script e SSH de servidor |
jj (Jujutsu) | Experimentando com VCS | O padrão da equipe é Git CLI |
| Painel git do IDE | Staging rápido | Aprendendo a resolver conflitos de rebase |
gh pr create | PR do terminal | Você precisa ter o GitHub CLI instalado |
FAQs
merge vs rebase em branches de feature?
Rebase em main para um histórico de PR limpo em branches privados; merge em branches de release compartilhados de acordo com a política da equipe.
Como desfazer um commit mas manter as alterações?
git reset --soft HEAD~1 move o HEAD um commit para trás mantendo os arquivos em staging.
O que colocar nas mensagens de commit?
Assunto imperativo, ID do ticket, corpo explicando o porquê - consulte Convenções e Guia de Estilo.
Devo commitar .python-version?
Sim, quando a equipe usa pyenv/mise - documenta o pin do interpretador ao lado de requires-python.
Como ver branches remotos?
git branch -r após git fetch --prune remove branches de rastreamento remoto obsoletos.
Recuperar branch deletado?
git reflog e então git checkout -b feat/x <sha> dentro da janela padrão de 90 dias.
Comparar com main?
git diff origin/main...HEAD mostra o delta do PR no estilo de três pontos.
Marcar releases da CLI?
git tag -a v1.2.0 -m "release 1.2.0" e então git push origin v1.2.0 quando a tag aciona o deploy.
Clonar com submodules?
git clone --recurse-submodules para repositórios que vendem dependências nativas - raro em serviços puramente Python.
Commits assinados?
Configure SSH ou GPG para assinar quando a política da organização exigir - git log --show-signature verifica.
Relacionados
- Branching & Merging - estratégias de branch
- Configuração do Git - aliases e hooks
- GitHub CLI - automação de PR
- Checklist de Configuração de Ambiente - configuração inicial do git
Versões da Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.