## 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:

Do arquivo editado ao commit
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 commit

Comandos do dia a dia

O ciclo básico de trabalho
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 linha

Desfazendo: 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.