## glossário
O que é Git?
Git é um sistema de controle de versão distribuído criado em 2005 por Linus Torvalds para gerenciar o desenvolvimento do kernel do Linux. Ele registra o histórico completo de alterações de um projeto, permitindo voltar a qualquer estado anterior, trabalhar em paralelo e entender quem mudou o quê e por quê.
A palavra distribuído é o que o diferencia dos sistemas anteriores. Cada desenvolvedor tem uma cópia integral do repositório, com todo o histórico. Isso permite trabalhar sem conexão, cria backups naturais e torna operações como consultar o histórico instantâneas, porque tudo está em disco local.
Os três estados de um arquivo
Entender esse fluxo elimina a maior parte da confusão inicial. Um arquivo modificado passa por três áreas antes de entrar no histórico:
diretório de área de repositório
trabalho --> staging --> local --> remoto
(modificado) (git add) (git commit) (git push)
git status # em que estado está cada arquivo
git diff # mudou mas ainda não foi para o staging
git diff --staged # está no staging aguardando commitComandos do dia a dia
git clone <url> # baixa um repositório
git checkout -b feat/carrinho # cria e entra em uma branch
git add . # move alterações para o staging
git commit -m "adiciona carrinho"
git pull --rebase # traz o remoto sem merge extra
git push -u origin feat/carrinho
git log --oneline --graph # visualiza o histórico
git blame arquivo.ts # quem alterou cada linhaDesfazendo: cada caso tem seu comando
Essa é a área que mais gera insegurança. A escolha depende de onde a alteração já chegou:
git restore arquivo— descarta alterações locais ainda não adicionadas ao staging.git restore --staged arquivo— tira do staging sem perder as alterações.git commit --amend— corrige a mensagem ou o conteúdo do último commit, se ainda não foi enviado.git revert <hash>— cria um novo commit que desfaz outro. Seguro em branches compartilhadas.git reset --hard <hash>— reescreve o histórico e descarta alterações. Perigoso: use apenas localmente.
A regra que evita acidentes: nunca reescreva histórico já compartilhado. Se o commit já foi enviado e outras pessoas o baixaram, use revert, não reset.
Boas práticas de commit
Commits pequenos e focados em uma mudança lógica facilitam revisão e permitem reverter cirurgicamente. A mensagem deve explicar por quê, não o quê — o diff já mostra o quê. Convenções como Conventional Commits (feat:, fix:, docs:) padronizam o histórico e permitem gerar changelogs automaticamente, o que conversa diretamente com versionamento semântico.
## faq
Perguntas frequentes
Qual a diferença entre Git e GitHub?
Git é o sistema de controle de versão que roda na sua máquina. GitHub é uma plataforma na web que hospeda repositórios Git e adiciona colaboração — pull requests, issues, CI/CD e revisão de código. Alternativas incluem GitLab e Bitbucket. Você pode usar Git sem nenhuma delas.
Merge ou rebase: qual usar?
Merge preserva o histórico real, incluindo a bifurcação, e é seguro em branches compartilhadas. Rebase reescreve os commits sobre a base atual, produzindo um histórico linear e mais legível. A recomendação comum é rebase em branches locais antes de abrir o PR, e merge para integrar na branch principal.
Como recuperar um commit que apaguei?
Use git reflog, que registra todas as posições recentes do HEAD, mesmo as removidas do histórico visível. Encontre o hash do commit desejado e volte com git reset --hard, ou crie uma branch a partir dele. O Git raramente descarta dados de fato antes da coleta de lixo.