Remover um arquivo existente de um repositório Git


Respostas:


143

Apenas para dar a resposta completa de uma só vez:

  1. from klemens: você precisa adicionar o arquivo em .gitignorealgum lugar acima do arquivo indesejado no repositório. ie

    $ cd $ cat >> .gitignore development.log Cd

  2. De. narebski: Em seguida, você precisa remover o arquivo do repositório executando " git rm --cached <file>e confirmando esta remoção"

Se você também esperava fazer com que o repositório parecesse nunca ter rastreado esse arquivo, isso é muito mais complicado e altamente desencorajado, pois não apenas cria novos commit para cada commit em sua história, destruindo a interoperabilidade de maneira desagradável. entre outras pessoas que clonaram seu repositório, mas isso também deixa todos os commit não testados (supondo que você teste seus commit antes de realizá-los).

Com essa ressalva, a ferramenta que você está procurando se esse é seu objetivo filter-branch. O primeiro exemplo faz exatamente o que estou descrevendo.


3
O uso do git rm --cached parece não apenas removê-lo da ramificação, mas quando puxo para outro sistema, ele exclui os arquivos fisicamente naquele sistema. Alguma idéia do que está acontecendo lá?
biagidp

2
Em resposta ao exposto: acredito que o problema estava no fato de eu não ter o .gitignore instalado no sistema alternativo antes de efetuar as alterações, portanto, a exclusão removeu a cópia local. Pelo menos essa é a teoria #
2223 biagidp

53

Para parar de rastrear o arquivo, basta usar git rm --cached <filename>.

Mas, como indicado pelas outras pessoas aqui, adicionar o arquivo ao .gitignore pode impedir que você o adicione acidentalmente novamente mais tarde.


1

adicione o arquivo gitignore.

consulte http://git-scm.com/docs/gitignore


13
Esta é apenas metade da resposta. .gitignoreas entradas não se aplicam a arquivos que já estão sendo rastreados.
CB Bailey

10
A segunda parte é git rm --cached <file>e, em seguida, confirma essa remoção.
Jakub Narębski

1
Por que não existe um comando simples para o git reavaliar todos os arquivos rastreados atualmente de acordo com o arquivo .gitignore atual? ... ou isso está exercendo muito senso comum? : p
Alexander - Reinstate Monica
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.