Cheatsheet Git
Sistema de controle de versão
Git
Introdução e Configuração
O que é o Git (História Rápida)
O Git é um sistema de controlo de versões distribuído, criado por Linus Torvalds em 2005 (o mesmo criador do Linux) para substituir o BitKeeper no desenvolvimento do kernel.
Principais características:
- Distribuído: cada utilizador tem o repositório completo localmente, com todo o histórico.
- Rápido: operações como
commit,branchemergesão feitas localmente, sem rede. - Seguro: cada alteração é protegida por um hash
SHA-1, o que torna o histórico praticamente inviolável.
Ver a configuração (git config --list)
git config --list git config --global --list git config user.name git config --show-origin --list
O --list mostra todas as definições ativas (sistema, global e local). Para ver só um valor, passa a chave, por exemplo user.name. O --show-origin indica de que ficheiro (.gitconfig) vem cada definição — útil para resolver conflitos de configuração.
Criar repositório (git init)
git init git init meu-projeto git init --bare repositorio.git
O git init cria a pasta oculta .git com toda a estrutura interna do repositório. Com um nome de pasta, cria também o diretório. A flag --bare cria um repositório sem working directory, usado em servidores.
Atenção: se já existir uma pasta .git, não executes isto de novo — podes corromper o histórico.
Níveis de configuração: system, global, local
O Git lê a configuração em três níveis, do mais geral para o mais específico:
--system: todo o computador (ficheiro/etc/gitconfig).--global: o teu utilizador (ficheiro~/.gitconfig).--local: só o repositório atual (ficheiro.git/config) — é o nível por omissão.
O nível mais específico ganha sempre: uma definição --local sobrepõe-se à --global, que se sobrepõe à --system.
Clonar um projeto existente (git clone)
git clone https://github.com/utilizador/repositorio.git git clone https://github.com/utilizador/repositorio.git pasta-local git clone --depth 1 https://github.com/utilizador/repositorio.git git clone -b develop https://github.com/utilizador/repositorio.git
O git clone copia tudo do repositório remoto (histórico, branches, tags) para a tua máquina e cria automaticamente a ligação ao origin. O --depth 1 faz um clone superficial (só o último commit, mais rápido). O -b clona diretamente uma branch específica.
Verificar a versão e obter ajuda
git --version git help config git config --help
O git --version mostra a versão instalada — útil para confirmar se tens funcionalidades recentes como o git switch (Git 2.23+). O git help comando abre o manual completo de qualquer comando.
Configurar utilizador (git config)
git config --global user.name "O Teu Nome" git config --global user.email "email@exemplo.com" git config --global init.defaultBranch main git config --global core.editor "code --wait"
Define a identidade que o Git regista em cada commit. A flag --global aplica a todo o utilizador; sem ela, a configuração fica apenas no repositório atual. O init.defaultBranch define o nome da branch inicial e o core.editor o editor usado nas mensagens.
Comandos Básicos
Ver o estado atual (git status)
git status git status -s git status --ignored
O comando mais usado no Git. Mostra a branch atual, os ficheiros alterados, os que estão em staging (prontos para o próximo commit) e os não rastreados. O -s dá uma versão curta e o --ignored inclui ficheiros ignorados pelo .gitignore.
Commit direto dos ficheiros modificados (-am)
git commit -am "Atualizar dependências"
O -a adiciona automaticamente todos os ficheiros já rastreados e modificados, saltando o git add. Atenção: ficheiros novos (não rastreados) não são incluídos — esses continuam a precisar de git add.
Ignorar ficheiros (.gitignore)
node_modules/ .env *.log dist/ !dist/.gitkeep
O ficheiro .gitignore diz ao Git que ficheiros não devem ser rastreados: dependências (node_modules/), segredos (.env), logs e artefactos de build. O ! nega um padrão (inclui de volta). Ficheiros já versionados não são ignorados — usa git rm --cached primeiro.
Adicionar ficheiros ao staging (git add)
git add ficheiro.php git add . git add -p git add *.js
O staging é a "sala de espera" antes do commit: escolhes exatamente o que entra. O git add . adiciona tudo; o -p (patch) deixa rever e aprovar parte a parte de cada ficheiro. Nunca faças commits às cegas: git status + git add dá-te controlo total.
Ver diferenças (git diff)
git diff git diff --staged git diff main..feature git diff HEAD~3
O git diff mostra as alterações fora do staging; com --staged mostra o que já está preparado para o próximo commit. Podes comparar duas branches com main..feature ou o teu trabalho contra um commit antigo com HEAD~3.
Os três estados de um ficheiro
Cada ficheiro no Git vive num de três estados:
- Working directory: os ficheiros como estão no teu disco, com alterações por guardar.
- Staging area: o que preparaste com
git addpara o próximocommit. - Repositório: o que já foi gravado com
git commit.
O fluxo normal é sempre: editar → git add → git commit.
Criar um commit (git commit)
git commit -m "Mensagem clara e útil"
Um commit é um ponto guardado na linha temporal do projeto. Boas mensagens poupam horas de debugging: descreve o que foi feito e porquê, não apenas "fix". Regra de ouro: título curto e direto, até 50 caracteres.
Remover ficheiros do repositório (git rm)
git rm ficheiro.txt git rm -r pasta/ git rm --cached ficheiro.txt
O git rm apaga o ficheiro do repositório e do disco. O --cached remove só do repositório, mantendo o ficheiro local — a forma correta de deixar de versionar algo que deve passar para o .gitignore.
Commit com título e corpo
git commit -m "Adicionar validação de email" -m "Impede registos com emails inválidos. Valida formato e domínio."
O primeiro -m é o título; o segundo fica como corpo da mensagem. O Git lê a primeira linha como título — deve ser curto e direto. Usa o corpo para explicar o contexto e o porquê da alteração.
Renomear ou mover ficheiros (git mv)
git mv antigo.php novo.php git mv ficheiro.php pasta/
O git mv renomeia ou move ficheiros mantendo o histórico de alterações associado. É o equivalente a fazer mv + git add num só passo, e o Git regista a operação como rename.
Histórico e Inspeção
Ver histórico completo (git log)
git log git log -5 git log --stat
Mostra o histórico de commits da branch atual: IDs (SHA-1), autores, datas e mensagens. O -5 limita aos últimos cinco e o --stat acrescenta um resumo dos ficheiros alterados em cada commit.
Procurar código no histórico (git log -S)
git log -S "nomeDaFuncao" git log -S "nomeDaFuncao" --oneline
O -S (pickaxe) encontra os commits que adicionaram ou removeram aquele texto no código — não apenas na mensagem. É a ferramenta certa para descobrir em que commit uma função ou bug foi introduzido.
Encontrar bugs com bisect
git bisect start git bisect bad git bisect good v1.0 git bisect reset
O git bisect faz uma pesquisa binária no histórico: marcas um commit bom (good) e um mau (bad), e o Git vai testando os do meio até encontrar o commit exato que introduziu o bug. O git bisect reset devolve-te à branch original.
Histórico resumido (git log --oneline)
git log --oneline git log --oneline -10
Mostra cada commit numa só linha, com o ID abreviado e a mensagem. É a forma mais rápida de ter uma visão geral e limpa do histórico do projeto.
Ver um commit específico (git show)
git show git show a1b2c3d git show a1b2c3d --stat
Sem argumentos, mostra o último commit com o diff completo. Com um ID (basta o prefixo, ex.: a1b2c3d), mostra esse commit. Também funciona para ver o conteúdo de uma tag ou de um ficheiro noutro ponto do histórico.
Estatísticas de contribuição (git shortlog)
git shortlog -sn git shortlog -sn --since="1 year ago"
O git shortlog -sn agrupa os commits por autor com a contagem, ordenada do mais ativo para o menos. Ideal para relatórios rápidos de atividade da equipa.
Histórico visual de todas as branches
git log --oneline --graph --all git log --graph --pretty=format:'%h %d %s (%an)' --all
Combina --oneline, --graph (desenho ASCII das ramificações) e --all (todas as branches, não só a atual). Permite visualizar rapidamente a estrutura do projeto e como as branches se interligam nos merges.
Quem alterou cada linha (git blame)
git blame ficheiro.php git blame -L 10,20 ficheiro.php git blame -w ficheiro.php
O git blame mostra, linha a linha, o último commit e o autor que tocou em cada uma. O -L 10,20 limita ao intervalo de linhas e o -w ignora alterações de espaços. Útil para perceber a origem de código estranho — sem julgamentos!
Filtrar o histórico
git log --author="Nome" git log --grep="palavra" git log --since="2 weeks ago" git log -- app/Models/
Filtra commits por autor (--author), por texto na mensagem (--grep), por data (--since/--until) ou por caminho de ficheiro. Essencial para encontrar "quem fez isto" ou "quando apareceu aquele bug".
Recuperar commits perdidos (git reflog)
git reflog git reflog --date=iso git checkout a1b2c3d
O reflog regista todas as movimentações do HEAD — mesmo commits "apagados" por um reset. É a rede de segurança do Git: encontra o ID do commit perdido e recupera-o com git checkout ou git reset. Nada está verdadeiramente perdido.
Branches
Criar branch (git branch)
git branch feature/nome-da-branch
As branches são "universos paralelos" do teu código: a main é a linha temporal oficial e as restantes são ramificações onde trabalhas sem estragar nada. Convenções mais usadas: feature/ (novas funcionalidades), bugfix/ (bugs do dia a dia), hotfix/ (urgências em produção) e release/ (preparar versões).
Criar e mudar ao mesmo tempo
git checkout -b feature/login
Cria a branch feature/login e muda logo para ela. Combina git branch (criar) e git checkout (mudar) num só passo — a forma mais rápida de começar uma funcionalidade nova.
Forçar apagar + apagar remota
git branch -D nome git push origin --delete nome
O -D apaga a branch mesmo sem merge — atenção, o trabalho não integrado perde-se (embora o reflog ainda o guarde por uns tempos). O push origin --delete remove a branch do repositório remoto.
Ver branches existentes (git branch)
git branch git branch -v git branch --merged
Lista as branches locais e marca com * aquela em que estás. O -v mostra o último commit de cada uma e o --merged lista as que já estão integradas na branch atual — boas candidatas a apagar.
git switch: a alternativa moderna
git switch nome-da-branch git switch -c feature/login git switch -
O git switch (Git 2.23+) faz só a parte do checkout que muda de branch, sem os efeitos secundários perigosos (como restaurar ficheiros). O -c cria e muda, e o - volta à branch anterior.
Ver branches locais e remotas
git branch -a git branch -r
O -a mostra todas as branches (locais e remotas); o -r só as remotas (ex.: origin/main). As remotas são "fotografias" do servidor, atualizadas com git fetch.
Renomear uma branch
git branch -m novo-nome git branch -m nome-antigo novo-nome
O -m renomeia a branch atual (ou a indicada). Se a branch já estava no remoto, terás de apagar a remota antiga com git push origin --delete e fazer push da nova com -u.
Mudar de branch (git checkout)
git checkout nome-da-branch
Atualiza os ficheiros do working directory para refletirem a branch escolhida e move o ponteiro HEAD para ela. O Git bloqueia a troca se houver alterações não guardadas que entrem em conflito — usa git stash nesses casos.
Apagar branch local (seguro)
git branch -d nome
O git branch -d apaga a branch só se já tiver sido integrada (merged) noutra. É a forma segura de limpar branches que já não são precisas, sem risco de perder trabalho.
Merge e Rebase
Merge (junção normal)
git checkout main git merge bugfix/nome-da-branch
O git merge cria um merge commit que junta o trabalho da branch à atual, preservando o histórico tal como aconteceu. Ótimo para equipas, porque regista quando e como cada funcionalidade foi integrada.
Abortar merge ou rebase
git merge --abort git rebase --abort
Se um merge ou rebase correu mal (conflitos impossíveis, por exemplo), o --abort cancela a operação e devolve tudo ao estado anterior, sem danos. É o "botão de pânico" oficial.
Merge sem fast-forward (--no-ff)
git merge --no-ff feature/login
Por omissão, se a branch não divergiu, o Git só avança o ponteiro (fast-forward) e o merge fica invisível no histórico. O --no-ff força a criação do merge commit, mantendo visível que aquela funcionalidade existiu como branch.
Resolver conflitos
<<<<<<< HEAD o teu código ======= código da outra branch >>>>>>> nome-da-branch
Quando o Git não consegue juntar duas versões da mesma linha, marca o ficheiro com <<<<<<< HEAD, ======= e >>>>>>>. Passos: abre o ficheiro, escolhe o que manter (podes misturar ou reescrever), remove as marcas, guarda e finaliza com git add . e git commit.
Merge squash (--squash)
git checkout main git merge --squash feature/login git commit -m "Adicionar login"
O --squash junta todos os commits da branch num único conjunto de alterações, que commitas manualmente. Ideal para transformar branches com dezenas de commits "wip" num único commit limpo na main.
Cherry-pick: aplicar um commit específico
git cherry-pick a1b2c3d git cherry-pick a1b2c3d b2c3d4e git cherry-pick --no-commit a1b2c3d
Aplica um commit específico (pelo ID) à branch atual, sem fazer merge da branch inteira. Útil para levar uma correção urgente para a release sem arrastar o resto da feature. O --no-commit aplica as alterações sem commitar.
Rebase (histórico linear)
git checkout feature git rebase main
"Teletransporta" os teus commits como se tivessem sido feitos depois dos últimos da main, ficando o histórico linear e limpo. Perigoso em branches partilhadas no remoto: reescrever histórico alheio causa conflitos e perda de trabalho.
Merge vs Rebase: quando usar
Merge: preserva o histórico real, cria merge commits, seguro em branches partilhadas. Usa quando trabalhas em equipa no remoto.
Rebase: reescreve o histórico para ficar linear, mais limpo de ler. Usa apenas em branches locais e pessoais, antes de fazer push.
Regra de ouro: nunca faças rebase em branches públicas que outros também usam.
Remotos
Ligar repositório local ao remoto
git remote add origin https://github.com/utilizador/repo.git
Adiciona o repositório remoto com o nome origin (convenção para o remoto principal). A partir daqui podes usar git push e git fetch para sincronizar com o GitHub, GitLab ou Bitbucket.
git pull: fetch + merge
git pull git pull origin main
Traz as alterações do remoto e aplica-as automaticamente à tua branch atual. É o equivalente a git fetch + git merge. Se houver divergências, pode gerar conflitos ou um merge commit.
Push com upstream (-u)
git push -u origin nome-da-branch
Envia a branch e liga-a à remota (define o upstream). A partir daí, git push e git pull funcionam sem argumentos — o Git já sabe de onde vem e para onde vai o código.
Ver repositórios remotos (git remote -v)
git remote git remote -v git remote show origin
Lista os remotos configurados. O -v mostra os URLs de fetch e push (permite confirmar se usas HTTPS ou SSH). O git remote show origin dá o detalhe completo: branches rastreadas e estado de sincronização.
pull vs fetch
git fetch: descarrega as novidades mas não toca no teu código — seguro para espreitar. git pull: descarrega e integra logo na tua branch. Na dúvida, usa fetch primeiro, vê o que mudou com git log origin/main, e só depois decide entre merge ou rebase.
Force push seguro (--force-with-lease)
git push --force-with-lease git push --force
Depois de um rebase, o histórico diverge do remoto e o push normal é recusado. O --force sobrepõe o remoto cega e perigosamente; o --force-with-lease só avança se ninguém tiver enviado commits novos — usa sempre este.
Renomear ou remover um remoto
git remote rename origin upstream git remote remove upstream
O rename muda o nome de um remoto (e atualiza todas as referências). O remove apaga a ligação — os teus commits locais não são afetados, só deixas de poder fazer push/pull para esse endereço.
git pull --rebase (histórico linear)
git pull --rebase git config --global pull.rebase true
Traz as alterações do remoto e reaplica os teus commits por cima, sem criar merge commits. Mantém o histórico limpo e linear. Podes tornar este comportamento o padrão com a configuração pull.rebase true.
git fetch: ver sem tocar
git fetch git fetch origin git fetch --all --prune
Descarrega as novidades do remoto (novos commits, branches) sem alterar o teu trabalho local — podes inspecionar antes de decidir. O --prune apaga as referências locais a branches remotas que já foram apagadas no servidor.
Enviar alterações (git push)
git push origin nome-da-branch git push
Envia os commits da tua branch local para o remoto origin. Se a branch não existir no remoto, é criada. Depois de definir o upstream (ver card seguinte), basta git push.
Stash
Guardar alterações sem commit (git stash)
git stash git stash push
Guarda as alterações não commitadas e devolve o working directory ao estado limpo do último commit. Perfeito quando precisas de mudar de branch "agora já" sem perder o trabalho em curso.
Aplicar um stash (git stash apply)
git stash apply
git stash apply stash@{2}O git stash apply reaplica as alterações guardadas ao working directory sem remover o stash da lista — podes aplicá-lo em várias branches ou manter a cópia de segurança.
Stash com mensagem
git stash push -m "WIP: formulário de login"
A flag -m dá uma mensagem ao stash — essencial para o identificar na lista quando tens vários guardados. Sem ela, o Git usa a mensagem genérica WIP on branch..., difícil de distinguir.
Aplicar e remover (git stash pop)
git stash pop
Aplica o stash mais recente e remove-o da lista, num só passo. É o fluxo normal: guardaste com git stash, voltas ao trabalho com git stash pop.
Stash com ficheiros não rastreados (-u)
git stash -u git stash --include-untracked
Por omissão, o stash ignora ficheiros novos (não rastreados). O -u inclui-os — útil quando criaste ficheiros que ainda não tinham levado git add.
Remover um stash específico
git stash drop stash@{0}Apaga um stash da lista sem o aplicar. Usa o identificador que vês em git stash list — por exemplo stash@{1} para o segundo mais recente.
Ver a lista de stashes
git stash list
git stash show stash@{1}
git stash show -p stash@{1}Lista todos os stashes com identificadores stash@{0}, stash@{1}, etc. (o {0} é o mais recente). O show resume as alterações e o -p mostra o diff completo — para veres o que guardaste antes de aplicar.
Apagar todos os stashes
git stash clear
Apaga todos os stashes de uma vez. Atenção: não há confirmação nem reflog que os devolva facilmente — confirma com git stash list antes.
Desfazer Alterações
Corrigir o último commit (--amend)
git commit --amend -m "Nova mensagem" git add ficheiro-esquecido.php git commit --amend --no-edit
Reescreve o último commit: altera a mensagem ou acrescenta ficheiros esquecidos (com --no-edit mantém a mensagem). Só em commits locais — fazer amend a um commit já enviado reescreve o histórico e causa confusão no remoto.
Descartar alterações num ficheiro (git restore)
git restore ficheiro.php git restore .
Reverte o ficheiro para o estado do último commit, descartando as alterações não guardadas. É o substituto moderno do antigo git checkout -- ficheiro. Atenção: alterações descartadas não são recuperáveis.
Remover o último commit mantendo alterações
git reset HEAD~1 git reset HEAD~3
Desfaz o último commit mas mantém as alterações no working directory (modo mixed, o padrão). O número depois do ~ indica quantos commits recuar: HEAD~3 remove os três últimos.
Desfazer um commit com outro commit (git revert)
git revert a1b2c3d git revert HEAD
Cria um novo commit que anula as alterações do commit indicado, sem tocar no histórico. É a única forma segura de desfazer em branches partilhadas — ao contrário do reset, que reescreve o passado.
Os três modos do reset
git reset --soft HEAD~1 git reset --mixed HEAD~1 git reset --hard HEAD~1
--soft: remove o commit, mantém tudo em staging. --mixed (padrão): remove o commit e o staging, mantém os ficheiros. --hard: apaga tudo — commit, staging e alterações no disco. O --hard é destrutivo: usa só com certezas.
Limpar ficheiros não rastreados (git clean)
git clean -n git clean -f git clean -fd git clean -fdx
Apaga ficheiros não rastreados do working directory. O -n é um ensaio (mostra o que seria apagado, sem apagar); o -f força, o -d inclui pastas e o -x também os ignorados pelo .gitignore. Faz sempre -n primeiro.
Tirar ficheiros do staging (git restore --staged)
git restore --staged ficheiro.php git restore --staged .
Desfaz o git add: o ficheiro sai da staging area mas as alterações continuam no disco. Permite corrigir o que vai entrar no próximo commit sem perder trabalho.
reset vs revert vs restore
git reset: move o ponteiro HEAD para trás — reescreve o histórico, só para commits locais. git revert: cria um commit que anula outro — seguro no remoto. git restore: desfaz alterações em ficheiros (no disco ou no staging), sem tocar em commits. Regra simples: local → reset; partilhado → revert; ficheiros → restore.
Avançado
Rebase interativo (rebase -i)
git rebase -i HEAD~3 git rebase --continue
Abre um editor com os últimos 3 commits para os reescreveres: mudar a ordem, juntar (squash), renomear (reword) ou apagar (drop). Depois de guardar, continua com git rebase --continue. Ideal para limpar commits "wip" antes de um push.
Hooks do Git
# .git/hooks/pre-commit #!/bin/sh php artisan test
Os hooks são scripts executados automaticamente em pontos-chave: pre-commit (antes de cada commit — ideal para correr testes ou linters), commit-msg (validar a mensagem), pre-push, etc. Vivem na pasta .git/hooks/ e não são versionados por omissão.
Manutenção (git gc)
git gc git prune git count-objects -v
O git gc (garbage collection) comprime o histórico e remove objetos inacessíveis, mantendo a pasta .git pequena e rápida. O Git já o corre automaticamente de vez em quando; força-o em repositórios muito antigos ou após grandes limpezas.
Comandos do rebase interativo
No editor do rebase -i, cada linha começa por um comando:
pick: mantém o commit como está.reword: mantém mas edita a mensagem.squash: junta ao commit anterior (mantendo as mensagens para editar).fixup: junta ao anterior, descartando a mensagem.drop: apaga o commit.edit: pára nesse commit para o alterares (com--amend).
Arquivar o projeto (git archive)
git archive -o release-v1.0.zip v1.0.0 git archive --format=tar.gz --prefix=app/ HEAD > app.tar.gz
Exporta o estado do projeto num dado ponto (tag, branch ou commit) para um zip ou tar — sem o histórico .git. Ideal para entregar releases ou fazer backups do código.
Tags (git tag)
git tag v1.0.0 git tag -a v1.0.0 -m "Versão 1.0.0" git tag -l "v1.*" git push origin v1.0.0 git push origin --tags
As tags marcam pontos fixos do histórico, normalmente versões (v1.0.0). As anotadas (-a) guardam autor, data e mensagem. As tags não vão para o remoto automaticamente — usa git push origin --tags.
Aliases: atalhos personalizados
git config --global alias.st status git config --global alias.co checkout git config --global alias.lg "log --oneline --graph --all"
Os aliases criam atalhos para os comandos que mais usas. Depois de alias.st status, basta escrever git st. O clássico git lg dá-te o histórico visual completo com três teclas.
Worktrees: várias branches em simultâneo
git worktree add ../projeto-hotfix hotfix/urgente git worktree list git worktree remove ../projeto-hotfix
O worktree cria uma segunda pasta de trabalho do mesmo repositório, noutra branch — sem clones duplicados. Perfeito para corrigir um bug urgente sem guardar o que tens em mãos com stash.
Submodules
git submodule add https://github.com/lib/dependencia.git libs/dep git submodule update --init --recursive git clone --recurse-submodules URL
Os submodules embutem outro repositório dentro do teu, com a versão fixada num commit específico. Depois de clonar um projeto com submodules, o --init --recursive descarrega-os. Alternativas modernas: pacotes via composer ou npm.
Extras e Boas Práticas
Vim: entrar em modo de edição
Quando o Git abre o vim (num commit sem -m, por exemplo), estás em modo normal — as teclas não escrevem. Para editar, pressiona:
i→ inserir onde o cursor estáa→ inserir a seguir ao cursoro→ criar uma linha nova por baixo
Vais ver -- INSERT -- no rodapé. Para voltar ao modo normal, pressiona Esc.
Git Emojis: performance e segurança
⚡ PERF – Melhorias de performance. Ex.: ⚡ PERF: otimizar query da base de dados.
🔒 SECURITY – Correção de vulnerabilidades. Ex.: 🔒 SECURITY: prevenir SQL Injection no login.
🚑 HOTFIX – Correção urgente em produção. Ex.: 🚑 HOTFIX: resolver downtime nos pagamentos.
🗑 REMOVE – Remover código ou ficheiros obsoletos. Ex.: 🗑 REMOVE: eliminar testes antigos.
Vim: guardar e sair
No modo normal (depois de Esc):
:w— guardar (write):q— sair (quit):wq— guardar e sair:q!— sair sem guardar:x— guardar e sair, mas só se houve alterações
Se ficaste preso no editor durante um commit: Esc, depois :wq e Enter.
Anatomia de uma boa mensagem de commit
Uma boa mensagem de git commit tem três partes:
- Título (até 50 caracteres): imperativo e direto — "Adicionar validação de email", não "adicionei".
- Linha em branco a separar.
- Corpo (opcional): explica o porquê e o contexto, não o como (o código mostra isso).
Se o título precisar de "e", provavelmente são dois commits.
Git Emojis: funcionalidades e correções
📦 NEW – Adicionar nova funcionalidade ou módulo. Ex.: 📦 NEW: criar módulo de autenticação com Google.
➕ ADD – Adicionar código simples a algo já existente. Ex.: ➕ ADD: adicionar campo "telefone" no registo.
🐛 FIX – Corrigir um erro ou comportamento inesperado. Ex.: 🐛 FIX: corrigir falha na validação do email.
👌 IMPROVE – Melhorar código existente (performance, legibilidade). Ex.: 👌 IMPROVE: otimizar o carregamento do dashboard.
🚀 RELEASE – Publicar uma nova versão. Ex.: 🚀 RELEASE: versão 1.2.0 lançada.
Fluxo de trabalho diário recomendado
git status git add . git commit -m "📦 NEW: adicionar paginação" git pull --rebase git push
O ciclo seguro do dia a dia: verifica o estado com git status, prepara com git add, guarda com git commit, sincroniza com git pull --rebase (resolve conflitos localmente) e só então envia com git push.
Git Emojis: documentação, estilo e testes
📝 DOCS – Atualizações de documentação. Ex.: 📝 DOCS: atualizar README com instruções de instalação.
🖌 STYLE – Alterações de estilo/formatação (sem afetar lógica). Ex.: 🖌 STYLE: ajustar cores e posição dos botões.
🐳 DOCKER – Alterações em configurações ou imagens Docker. Ex.: 🐳 DOCKER: atualizar imagem base do container.
♻ REFACTOR – Refatoração sem mudar comportamento. Ex.: ♻ REFACTOR: dividir função grande em métodos menores.
✅ TEST – Adicionar ou melhorar testes automatizados. Ex.: ✅ TEST: testes unitários para autenticação.
Convenções de nomes de branches
Nomes consistentes mantêm o repositório previsível:
feature/nome— funcionalidade nova (nasce demain/develop).bugfix/nome— bug do dia a dia, não crítico.hotfix/nome— urgência em produção.release/1.2.0— preparação de versão (changelog, testes finais).
Usa minúsculas e hífenes (feature/login-social) e sê específico: fix-bug não diz nada a ninguém.