O git ainda mostra os arquivos modificados após adicionar ao .gitignore

252

Estou adicionando isso ao arquivo .gitignore

.idea/*

de qualquer maneira, o status é:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

O que estou fazendo de errado ? eu até adicionei .idea / * ao status global ~ / .gitignore_global, mas git, de qualquer maneira me mostra:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml
Said Kaldybaev
fonte

Respostas:

422

Você .gitignoreestá funcionando, mas ainda rastreia os arquivos porque eles já estavam no índice.

Para parar isso, você deve fazer: git rm -r --cached .idea/

Quando você confirmar, o .idea/diretório será removido do seu repositório git e as seguintes confirmações ignorarão o .idea/diretório.

PS: Você pode usar em .idea/vez de .idea/*ignorar um diretório. Você pode encontrar mais informações sobre os padrões sobre o .gitignore página homem .


Citações úteis na git-rmpágina de manual

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.
mcls
fonte
Você poderia explicar o que quis dizer com "Apenas adicionando .idea / também funcionaria". Esta é uma solução alternativa para usar .gitignoree depois executar git rm -cached?
Mehrad
3
@Mehrad há necessidade de o * em .gitignore
Steve jarros
2
Não, basta adicionar .idea / não funciona, porque, como você disse na resposta, ele já está no índice.
Henrique de Sousa
15
Então você está dizendo que precisa commitdepois de remover os arquivos em cache? Isso realmente parece contra-intuitivo; esses são arquivos que NÃO quero confirmar. E eu não quero que eles sejam excluídos do repositório (eu apenas quero que eles não fiquem mais ocupados git status). Ou estou apenas realmente confuso?
Scott Biggs
6
Seus arquivos já foram rastreados pelo git por causa de uma confirmação anterior; portanto, para removê-los, é necessário criar uma nova confirmação que os remova do repositório.
Mcls
47

Para as pessoas que ainda estão pesquisando esse problema, estão visualizando apenas esta página.

Isso o ajudará a remover os arquivos de índice armazenados em cache e a adicionar apenas os necessários, incluindo alterações no seu .gitignorearquivo.

1. git rm -r --cached .  
2. git add .
3. git commit -m 'Removing ignored files'

Aqui está um pouco mais de informação.

  1. Este comando removerá todos os arquivos em cache do índice.
  2. Este comando adicionará todos os arquivos, exceto aqueles mencionados em gitignore.
  3. Este comando confirmará seus arquivos novamente e removerá os arquivos que você deseja que o git ignore, mas mantenha-os no diretório local.
Sidhanshu_
fonte
1
Isso foi útil para mim, gostaria apenas de observar que, no Windows cmd, as aspas simples não parecem funcionar no número 3. Usando o git commit -am "Removendo arquivos ignorados" Mas funciona.
Sundance.101
1
Não se preocupe, e obrigado novamente pela resposta clara e concisa.
Sundance.101
1
Esta solução está mexendo com os meus arquivos de projeto realmente. Eu tive que reverter tudo depois de fazer isso.
Fatmajk 2/08/19
1

As soluções oferecidas aqui e em outros lugares não funcionaram para mim, portanto, acrescentarei à discussão para futuros leitores. É certo que ainda não compreendo completamente o procedimento, mas finalmente resolvi meu problema (semelhante) e quero compartilhar.

Eu tinha armazenado em cache acidentalmente alguns diretórios de documentos com várias centenas de arquivos ao trabalhar com o git no IntelliJ IDEA no Windows 10 e, após adicioná-los ao .gitignore(e PROVÁVEL movê-los um pouco), não consegui removê-los do Changelist padrão.

Primeiro comprometi as mudanças reais que fiz e depois resolvi isso - demorei muito tempo. Eu tentei git rm -r --cached ., mas que sempre se path-specERROS, com diferentes variações do path-spec, bem como com o -fe -rbandeiras.

git statusainda mostraria os nomes dos arquivos, então tentei usar alguns desses com git rm -cached, mas sem sorte. Armazenar e desmontar as alterações pareceu funcionar, mas elas ficaram na fila novamente depois de um tempo (sou um pouco confuso no período exato). Finalmente removi essas entradas para uso correto

git reset

Presumo que essa seja apenas uma BOA IDÉIA quando você não tiver alterações em etapas / armazenadas em cache que realmente deseja confirmar.

kiloton
fonte
0

Basta adicionar git rm -r --cached <folder_name/file_name>

Às vezes, você atualiza o arquivo .gitignore após o comando de confirmação dos arquivos. Portanto, os arquivos são armazenados em cache na memória. Para remover os arquivos em cache, use o comando acima.

Abhilash Ramteke
fonte
-2
  1. Git add.

  2. Status do Git // Verifique o arquivo que está sendo modificado

    // git reset HEAD --- substitua para qual arquivo você deseja ignorar

  3. git reset HEAD .idea / <- Aqueles que desejavam excluir .idea antes de confirmar // o status de verificação do git e o arquivo de ideias desapareceram, e você está pronto para começar!

  4. git commit -m ''

  5. empurrão

Lim Kean Phang
fonte
Isso seria uma suposição de que o OP deseja redefinir.
SovietFrontier