Como posso excluir um arquivo do git repo?

Eu adicionei um arquivo chamado "file1.txt" ao git repo. Depois disso, dir1 alguns diretórios chamados dir1 e dir2 e os dir2 para o git repo.

Agora o "file1.txt" atual tem "file1.txt" , dir1 e dir2 .
Como posso excluir "file1.txt" sem afetar outros como dir1 e dir2 ?

Use git rm :

 git rm file1.txt git commit -m "remove file1.txt" 

Mas se você quiser remover o arquivo somente do repository Git e não removê-lo do sistema de arquivos, use:

 git rm --cached file1.txt git commit -m "remove file1.txt" 

E para empurrar alterações para repo remoto

 git push origin branch_name 

git rm file.txt remove o arquivo do repository, mas também o exclui do sistema de arquivos local .

Para remover o arquivo do repository e não excluí-lo do sistema de arquivos local, use:
git rm --cached file.txt

A situação exata abaixo é onde eu uso o git para manter o version control do site da minha empresa, mas o diretório “mickey” era uma pasta tmp para compartilhar conteúdo privado com um desenvolvedor de CAD. Quando ele precisava de arquivos enormes, eu fiz um diretório privado, desvinculado e ftpd os arquivos lá para ele buscar via navegador. Esquecendo que fiz isso, mais tarde fiz um git add -A do diretório base do site. Posteriormente, o git status mostrou os novos arquivos que precisam ser confirmados. Agora eu precisava deletá-los do rastreamento e version control do git …

Exemplo de saída abaixo é do que acabou de acontecer comigo, onde eu inadvertidamente excluí o arquivo .003 . Felizmente, eu não me importo com o que aconteceu com a cópia local para .003 , mas alguns dos outros arquivos atualmente alterados foram atualizações que acabei de fazer no site e seria épico ter sido excluído no sistema de arquivos local! “Sistema de arquivos local” = o site ao vivo (não é uma ótima prática, mas é a realidade) .

 [~/www]$ git rm shop/mickey/mtt_flange_SCN.7z.003 error: 'shop/mickey/mtt_flange_SCN.7z.003' has local modifications (use --cached to keep the file, or -f to force removal) [~/www]$ git rm -f shop/mickey/mtt_flange_SCN.7z.003 rm 'shop/mickey/mtt_flange_SCN.7z.003' [~/www]$ [~/www]$ git status # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # deleted: shop/mickey/mtt_flange_SCN.7z.003 # # Changed but not updated: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: shop/mickey/mtt_flange_SCN.7z.001 # modified: shop/mickey/mtt_flange_SCN.7z.002 [~/www]$ ls shop/mickey/mtt_flange_S* shop/mickey/mtt_flange_SCN.7z.001 shop/mickey/mtt_flange_SCN.7z.002 [~/www]$ [~/www]$ [~/www]$ git rm --cached shop/mickey/mtt_flange_SCN.7z.002 rm 'shop/mickey/mtt_flange_SCN.7z.002' [~/www]$ ls shop/mickey/mtt_flange_S* shop/mickey/mtt_flange_SCN.7z.001 shop/mickey/mtt_flange_SCN.7z.002 [~/www]$ [~/www]$ [~/www]$ git status # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # deleted: shop/mickey/mtt_flange_SCN.7z.002 # deleted: shop/mickey/mtt_flange_SCN.7z.003 # # Changed but not updated: # modified: shop/mickey/mtt_flange_SCN.7z.001 [~/www]$ 

Update: Esta resposta está recebendo algum tráfego, então eu pensei em mencionar que minha outra resposta do Git compartilha alguns ótimos resources: Esta página tem um gráfico que ajuda a desmistificar o Git para mim. O livro “Pro Git” está online e me ajuda muito.

Se o seu arquivo já estiver no GitHub, você agora (julho de 2013) pode excluí-lo diretamente da GUI da web!

Basta visualizar qualquer arquivo em seu repository, clicar no ícone de lixeira na parte superior e confirmar a remoção como qualquer outra edição baseada na web.

botão de exclusão

(a confirmação refletirá a exclusão desse arquivo):

cometer uma exclusão

E assim, desapareceu.

Para obter ajuda com esses resources, leia nossos artigos de ajuda sobre criação , movimentação , renomeação e exclusão de arquivos.

Nota: Como é um sistema de version control, o Git sempre tem as suas costas se você precisar recuperar o arquivo mais tarde.

A última frase significa que o arquivo deletado ainda faz parte do histórico, e você pode restaurá-lo com bastante facilidade (mas ainda não através da interface web do GitHub):

Consulte ” Restaurar um arquivo excluído em um repository do Git “.

Esta é a única opção que funcionou para mim.

 git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql' 

Nota: Substitua * .sql pelo seu nome de arquivo ou tipo de arquivo. Tenha muito cuidado porque isso irá passar por todo commit e rasgar este tipo de arquivo.

Além disso, se for uma pasta a ser removida e suas pastas ou arquivos secundários subseqüentes, use:

 git rm -r foldername 

Mais geralmente, a git help com pelo menos perguntas simples como esta:

 zhasper@berens:/media/Kindle/documents$ git help usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS] The most commonly used git commands are: add Add file contents to the index : rm Remove files from the working tree and from the index 

Se você quiser excluir o arquivo do repo, mas deixá-lo no sistema de arquivos (será untracked):

 bykov@gitserver:~/temp> git rm --cached file1.txt bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo" 

Se você quiser excluir o arquivo do repository e do sistema de arquivos, existem duas opções:

  1. Se o arquivo não tiver alterações testadas no índice:

     bykov@gitserver:~/temp> git rm file1.txt bykov@gitserver:~/temp> git commit -m "remove file1.txt" 
  2. Se o arquivo tiver alterações testadas no índice:

     bykov@gitserver:~/temp> git rm -f file1.txt bykov@gitserver:~/temp> git commit -m "remove file1.txt" 

git rm só irá remover o arquivo deste branch a partir de agora, mas ele permanece no histórico e o git se lembrará dele.

O jeito certo de fazer isso é com o git filter-branch , como outros já mencionaram aqui. Ele irá rewrite cada commit no histórico do branch para deletar esse arquivo.

Mas, mesmo depois de fazer isso, o git pode se lembrar disso porque pode haver referências a ele em reflog, remotes, tags e tal.

Se você quiser destruí-lo completamente em um passo, eu recomendo que você use o git forget-blob

https://ownyourbits.com/2017/01/18/completamente-remove-um-arquivo-de-um-agital-repository-com-git-forget-blob/

É fácil, apenas git forget-blob file1.txt .

Isto irá remover todas as referências, fazer o git filter-branch e, finalmente, executar o coletor de lixo git gc para se livrar completamente deste arquivo em seu repo.

Outra maneira é excluir o arquivo da pasta local usando o comando rm e, em seguida, enviar as alterações para o servidor remoto.

 rm file1.txt git commit -a -m "Deleting files" git push origin master 

Se você tiver o aplicativo GitHub para Windows, poderá excluir um arquivo em 5 etapas simples:

  • Clique em Sincronizar.
  • Clique no diretório onde o arquivo está localizado e selecione a versão mais recente do arquivo.
  • Clique nas ferramentas e selecione “Abrir uma concha aqui”.
  • No shell, digite: “rm {filename}” e pressione Enter.
  • Confirme a alteração e sincronize novamente.

No meu caso eu tentei remover o arquivo no github depois de alguns commits mas poupe no computador

 git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD git push --force -u origin master 

e depois esse arquivo foi ignorado

Para excluir um arquivo específico

git rm filename

Para limpar todos os arquivos untracked de um diretório recursivamente em um único tiro

git clean -fdx

  1. Primeiro, remova arquivos do repository local.

    git rm -r Nome do arquivo

    ou, remova arquivos apenas do repository local, mas do sistema de arquivos

    git rm – Nome do arquivo em cache

  2. Em segundo lugar, confirme as alterações no repository local.

     git commit -m "unwanted files or some inline comments" 
  3. Finalmente, atualize / envie alterações locais para o repository remoto.

     git push 

Eu tentei muitas das opções sugeridas e nenhuma apareceu para trabalhar (não vou listar os vários problemas). O que acabei fazendo, que funcionou, foi simples e intuitivo (para mim) foi:

  1. mover todo o repository local em outro lugar
  2. clonar o repo novamente do master para o seu disco local
  3. Copie os arquivos / pasta de sua cópia original em # 1 de volta para o novo clone de # 2
  4. Certifique-se de que o arquivo grande com problema não esteja lá ou seja excluído no arquivo .gitignore
  5. faça o usual git add / git commit / git push

Eu tenho arquivos obj e bin que acidentalmente chegaram ao repository que eu não quero poluir minha lista de ‘arquivos alterados’

Depois que eu notei que eles foram para o controle remoto, eu os ignorei adicionando isso ao .gitignore

 /*/obj /*/bin 

Problema é que eles já estão no controle remoto, e quando eles são alterados, eles aparecem como alterados e poluem a lista de arquivos alterados.

Para parar de vê-los, você precisa excluir a pasta inteira do repository remoto.

Em um prompt de comando:

  1. CD para a pasta repo (ou seja, C:\repos\MyRepo )
  2. Eu quero excluir o SSIS \ obj. Parece que você só pode excluir no nível superior, então agora você precisa de CD no SSIS: (ou seja, C:\repos\MyRepo\SSIS )
  3. Agora digite a mágica incantation git rm -r -f obj
    • rm = remove
    • -r = remover recursivamente
    • -f = significa força, porque você realmente está falando sério
    • obj é a pasta
  4. Agora execute git commit -m "remove obj folder"

Recebi uma mensagem alarmante dizendo 13 arquivos alterados 315222 exclusões

Então, porque eu não queria ter que procurar a linha CMD, entrei no Visual Sstudio e fiz um Sync para aplicá-lo ao remoto

Incase se você não arquivar em seu repository local, mas em git repo, em seguida, basta abrir o arquivo no git repo através da interface web e encontrar o botão Excluir no canto direito da interface. Clique aqui, para ver a interface Excluir opção