Guia prático de Git
Branches curtas · Integração frequente · Releases controladas
main · features curtas · releases
A ideia em 30 segundos
TBD mantém
maincomo linha de integração, com entregas pequenas e branches curtas. CI (Integração Contínua) compila, testa e analisa o código a cada push ou PR/MR. Release branches são opcionais e apenas estabilizam versões enquantomainevolui.
Este é o fluxo principal quando o projeto já existe em um servidor Git. A URL pode usar SSH ou HTTPS.
git clone <URL-DO-REMOTO>
cd firmware-sensor
git switch main
git pull --ff-only origin mainorigin é o nome convencional do remoto. --ff-only evita criar merge automático e falha se houver divergência.
Use uma branch para uma mudança pequena que precisa de revisão ou CI antes de chegar à trunk. Termine em horas ou poucos dias.
git switch -c feat/leitura-sensor
git status
git diff -- src/sensor.c include/sensor.h
git add src/sensor.c include/sensor.h
git rm src/obsolete.c
git commit -m "feat: lê sensor por I2C"
git push -u origin feat/leitura-sensorAdicione arquivos explicitamente; git rm remove o arquivo do working tree e do índice.
Para corrigir o último commit antes de publicar:
git add include/sensor.h
git commit --amend --no-editBoa prática
Mesmo com a linha pela metade, faça um commit ao fim do dia para não perder progresso. No dia seguinte, continue com
--amende mantenha o histórico limpo.--amendcorrige o último commit e troca o SHA; use antes de publicar a branch. No PR/MR, Squash une os commits de trabalho em um commit limpo.
Antes de integrar, atualize sua branch sobre a trunk. rebase reescreve commits; evite-o em branch compartilhada.
git fetch origin
git rebase origin/main
# depois de editar e salvar o arquivo em conflito:
git add src/sensor.c
git rebase --continue
# para cancelar o rebase
git rebase --abort
git push -u origin feat/leitura-sensorgit add coloca a versão corrigida na área de preparação (staging); ele não cria o commit nem corrige o arquivo sozinho. Depois de salvar a resolução, use git diff para conferir o conteúdo e só então rode git add <arquivo>.
Abra uma Pull Request ou Merge Request. A CI executa build e testes, a revisão aprova e a proteção da trunk controla o merge.
Alerta
Evite
git push --forceemmaine em branches compartilhadas. Rebase e force push exigem coordenação.
Depois de a integração ser concluída, atualize a cópia local e remova a branch curta.
git switch main
git pull --ff-only origin main
git branch -d feat/leitura-sensor
git push origin --delete feat/leitura-sensorBoa prática
Branch curta não é uma segunda trunk. Mantenha
mainíntegra, testada e pronta para integração.
Marcio
Bulla
From beginner to beginner
Release branch é opcional: crie perto do lançamento, somente para estabilizar. A trunk continua recebendo features; a release não recebe funcionalidades novas.
git switch main
git pull --ff-only origin main
git switch -c release/1.0
git push -u origin release/1.0
git tag -a v1.0.0 -m "Release 1.0.0"
git push origin v1.0.0A tag deve apontar para o commit exato aprovado. Para um update 1.0.1 nascido na trunk, localize o SHA, leve a correção à release e só então crie a tag.
git switch main
git log --oneline --decorate -10
# corrija, teste e commite
git switch release/1.0
git cherry-pick <SHA>
git tag -a v1.0.1 -m "Release 1.0.1"
git push origin release/1.0 v1.0.1Propagação controlada
cherry-pickcria outro commit, normalmente com outro SHA. Em conflito, resolva, usegit addegit cherry-pick --continue; cancele comgit cherry-pick --abort.
Use o log para localizar o commit aprovado, entender a topologia e comparar trunk com release.
git log --oneline --decorate --graph --all -20
git show <SHA>
git log main..release/1.0
git diff main..release/1.0Regra
Anote o SHA antes de propagar uma correção ou criar uma tag.
Para recuperar um commit antigo sem reescrever a trunk compartilhada, localize-o e crie uma branch de recuperação.
git reflog
git switch -c recovery/old-state <SHA>
git restore --source=<SHA> -- src/sensor.c
git diff --stat
git add src/sensor.c
git commit -m "fix: restaura estado estável"
git push -u origin recovery/old-stateSe o objetivo é desfazer um commit já publicado, prefira revert:
git switch main
git pull --ff-only origin main
git revert <SHA>
git push origin mainCuidado
git revertcria um novo commit e preserva o histórico.git reset --hardpode descartar mudanças locais e não deve reescrever histórico compartilhado. Antes de trocar de estado, preserve trabalho comgit stash push -m "wip".
git clone — copia um repositório remoto.
git switch — muda de branch; -c cria uma nova.
git status — mostra o estado dos arquivos.
git diff — compara alterações ainda não commitadas.
git add — prepara alterações; não cria commit.
git rm — remove e prepara a remoção de um arquivo.
git rebase — reaplica commits sobre outra base; reescreve SHAs.
git merge — integra o histórico de outra branch.
git commit — grava no histórico o que foi preparado.
git log — lista commits; --oneline resume.
git show — exibe um commit e suas alterações.
git pull — busca e integra atualizações remotas.
git push — publica commits locais no remoto.
git fetch — busca referências sem alterar sua branch.
git tag — marca um commit com uma versão.
git cherry-pick — copia um commit para outra branch.
git revert / restore / stash — desfaz, recupera ou guarda.
Marcio
Bulla
From beginner to beginner
Versão para impressão: baixar o PDF A4
Fontes oficiais: Quarto · Mermaid GitGraph · Git · Trunk-Based Development