Removendo Pastas do Git Mantendo-as Locais
Entendendo o Conceito
O .gitignore só funciona para arquivos que ainda não são rastreados pelo Git. Se um arquivo ou pasta já foi adicionado ao histórico do repositório, incluir seu nome no .gitignore depois não produz efeito: o Git continua rastreando e exibindo modificações nele.
O funcionamento por trás disso é o seguinte:
- O índice do Git (área de staging) é a lista de arquivos que serão incluídos no próximo commit.
- O
.gitignorefunciona como uma lista de exclusão, mas só é consultado na hora de adicionar arquivos novos ao índice. - Arquivos já presentes no índice ou em commits anteriores continuam sendo monitorados normalmente, mesmo que estejam listados no
.gitignore.
Para parar de rastrear um arquivo que já está no índice sem deletá-lo do disco, é necessário removê-lo do índice explicitamente. Isso é feito com git rm --cached.
Passo a Passo
- Remover a pasta do índice do Git, mantendo os arquivos no disco local:
git rm -r --cached .vscode
- Adicionar a pasta ao
.gitignorepara que não seja rastreada novamente:
echo ".vscode/" >> .gitignore
- Registrar o
.gitignoreatualizado:
git add .gitignore
- Criar o commit da alteração:
git commit -m "chore: remover .vscode do rastreamento do git"
- Enviar para o repositório remoto:
git push origin sua-branch-principal
Explicando o código
git rm- Instrução para remover arquivos do repositório (do histórico de rastreamento do Git).
-r- Recursivo. Aplica a remoção não apenas à pasta principal, mas a tudo que estiver dentro dela (subpastas e arquivos).
--cached- Restringe a remoção ao índice (à "memória" do Git), preservando os arquivos físicos no disco. É o parâmetro que impede a deleção local.
echo ".vscode/" >> .gitignoreecho ".vscode/"gera o texto da regra de exclusão.>> .gitignoreanexa esse texto ao final do arquivo.gitignore, sem sobrescrever o conteúdo existente.
git add .gitignore- Adiciona o arquivo de regras atualizado ao índice, para que entre no commit.
git commit -m "..."- Cria o commit com a remoção do rastreamento e a atualização do
.gitignore. A mensagem segue o padrãochore:por se tratar de uma mudança de manutenção, sem alteração de código.
- Cria o commit com a remoção do rastreamento e a atualização do
git push origin sua-branch-principal- Envia o commit para o branch principal do repositório remoto.
Observações
- Erro:
fatal: pathspec '.vscode' did not match any files- O Git não encontrou a pasta
.vscodeno histórico de rastreamento. - Verificar se o terminal está na raiz do projeto (com
pwdno Linux/macOS). - Outra possibilidade: a pasta já foi removida do rastreamento anteriormente, e o comando é redundante.
- O Git não encontrou a pasta
- Esquecer o
--cachedapaga os arquivos do disco- Executar apenas
git rm -r .vscode(sem--cached) deleta a pasta física do computador. - Se o commit ainda não foi feito, é possível recuperar com:
- Executar apenas
git checkout HEAD -- .vscode
- Se o commit já foi feito, o VS Code oferece a aba Timeline (Linha do Tempo), que mantém versões locais recentes dos arquivos.
- Arquivos comuns que costumam ser removidos do rastreamento dessa forma
.DS_Store(macOS): arquivo de sistema que não deve ir para o repositório.node_modules: pasta de dependências, grande e regenerável vianpm install..vscode: configurações pessoais do editor, que podem conflitar com as de outros membros da equipe.