guide

Como ignorar arquivos que já foram commitados

Como tirar do rastreamento, com git rm --cached, arquivos que continuam aparecendo mesmo após entrar no .gitignore, como achar arquivos rastreados que casam com as regras e o que fazer quando um segredo foi commitado.

É a dúvida mais comum. O .gitignore só vale para arquivos que ainda não são rastreados. Um arquivo commitado uma vez continua mostrando alterações mesmo depois de você adicionar a regra. Para parar de rastreá-lo, é preciso tirá-lo do índice (a área de staging).

Um arquivo ou uma pasta

# 1) adicione a regra ao .gitignore (ex.: .env, dist/)
# 2) remova só do índice — o arquivo real na pasta de trabalho continua lá
git rm --cached .env
git rm -r --cached dist/
# 3) faça o commit
git commit -m "Stop tracking .env and dist"

O essencial é o --cached. Sem essa opção, git rm apaga também o arquivo da pasta de trabalho. Diretórios exigem -r.

Encontrar arquivos rastreados que casam com as regras

Para ver o que é afetado depois de aplicar um novo modelo, use o comando abaixo.

git ls-files -ci --exclude-standard

-c significa arquivos rastreados, -i só os que casam com regras de ignorar, e --exclude-standard aplica .gitignore, .git/info/exclude e a configuração global. Se a lista estiver correta, dá para tirar tudo do rastreamento de uma vez.

# bash / zsh
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached --
# PowerShell
git -c core.quotePath=false ls-files -ci --exclude-standard | ForEach-Object { git rm --cached -- "$_" }

A aba Parar de rastrear do gerador monta esses comandos para o seu shell.

Reaplicar tudo

Se você mudou bastante o .gitignore, também é comum esvaziar o índice e adicionar tudo de novo.

git rm -r --cached .
git add .
git commit -m "Apply .gitignore"

git add . aplica as regras de ignorar ao readicionar, então os arquivos ignorados ficam de fora. Mas confira a lista de remoções com git status antes de commitar. Em repositórios com configuração de fim de linha (core.autocrlf) diferente, muitos arquivos podem aparecer como alterados.

Efeito para as outras pessoas

Ao enviar com push o commit que para de rastrear o arquivo, ele é apagado da pasta de trabalho de quem fizer pull desse commit. Do ponto de vista do git, o arquivo foi removido do repositório. Se for algo que cada um precisa, como .env ou configurações de IDE, avise antes para que façam backup.

Se um segredo já foi enviado

Parar de rastrear só afeta os commits futuros. Nos commits antigos o arquivo continua lá e qualquer pessoa pode recuperá-lo do histórico. A ordem é esta:

  1. Revogue e gere novamente as chaves e senhas expostas primeiro. Isso é o mais importante.
  2. Pare de rastrear o arquivo e adicione-o ao .gitignore.
  3. Se necessário, apague o arquivo do histórico com uma ferramenta como git filter-repo e faça push forçado. Cópias já clonadas ou forks não são apagadas, então isso não substitui o passo 1.

assume-unchanged e skip-worktree não servem para ignorar

git update-index --assume-unchanged e --skip-worktree escondem temporariamente as alterações de um arquivo rastreado, mas o arquivo continua rastreado.

A própria documentação do git orienta a não usar essas opções para ignorar mudanças em arquivos rastreados. Para arquivos de configuração compartilhados, é mais seguro commitar um config.example.json e ignorar o config.json real.

Referências

← AnteriorRegras de ignorar só suas com .git/info/exclude