git-rm apagar - Como posso excluir um arquivo do git repo?





uma pasta (16)


  1. Primeiro, remova arquivos do repositório local.

    git rm -r Nome do arquivo

    ou, remova arquivos apenas do repositório local, mas do sistema de arquivos

    git rm - Nome do arquivo em cache

  2. Em segundo lugar, confirme as alterações no repositório local.

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

    git push 
    

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 ?




Nota: se você quiser excluir somente o arquivo do uso do git abaixo:

git rm --cached file1.txt

Se você deseja excluir também do disco rígido:

git rm file1.txt

Se você quiser remover uma pasta (a pasta pode conter poucos arquivos), você deve remover usando o comando recursivo, como abaixo:

git rm -r foldername

Se você quiser remover uma pasta dentro de outra pasta

git rm -r parentFolder/childFolder

Então, você pode se commit e push como de costume. No entanto, se você quiser recuperar a pasta apagada, você pode seguir isto: recuperar arquivos apagados do git é possível.

Do doc:

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…​

OPÇÕES

<file>…​

Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files. If you want Git to expand file glob characters, you

pode precisar escapar deles. Um nome de diretório principal (por exemplo, dir para remover dir / file1 e dir / file2) pode ser fornecido para remover todos os arquivos no diretório e recursivamente todos os subdiretórios, mas isso requer que a opção -r seja explicitamente fornecida. -f --force

Override the up-to-date check.

-n --dry-run

Don’t actually remove any file(s). Instead, just show if they exist in the index and would otherwise be removed by the command.

-r

Allow recursive removal when a leading directory name is given.

--

This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken for

opções de linha de comando). --cached

Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.

--ignore-unmatch

Exit with a zero status even if no files matched.

-q --quiet

git rm normally outputs one line (in the form of an rm command) for each file removed. This option suppresses that output.

Leia mais no documento oficial.




git rm só irá remover o arquivo desta ramificação 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á reescrever 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 outros.

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

https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-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.




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 ressincronize.



Eu tenho arquivos obj e bin que acidentalmente chegaram ao repositório 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 repositório 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




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

[email protected]:/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



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

Para remover o arquivo do repositório 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 controle de versão 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 controle de versão 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 para o 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 <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." 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 <file>..." 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 recursos: 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.




Depois de ter removido o arquivo do repositório com git rm você pode usar o BFG Repo-Cleaner para obliterar completa e facilmente o arquivo do histórico do repositório.




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.




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




Use git rm :

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

Mas se você quiser remover o arquivo somente do repositório 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  



Incase se você não arquivar em seu repositório 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




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 repositório, clicar no ícone de lixeira na parte superior e confirmar a remoção como qualquer outra edição baseada na web.

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

E assim, desapareceu.

Para obter ajuda com esses recursos, leia nossos artigos de ajuda sobre creating , moving , renaming e deleting arquivos.

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

A última sentença 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 repositório do Git ".




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




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

git rm -r foldername



Apenas redefina o comando abaixo usando o git :

git reset --soft HEAD~1

Explique: o que o git reset faz, ele é basicamente reset para qualquer commit que você gostaria de voltar, então se você combiná-lo com a chave --soft , ele retornará, mas mantenha as mudanças em seu (s) arquivo (s), então você volta ao estágio em que o arquivo acabou de ser adicionado, HEAD é o chefe do branch e se você combinar com ~1 (neste caso você também usa HEAD^ ), ele irá retornar somente um commit que você deseja. ..

Eu crio os passos na imagem abaixo em mais detalhes para você, incluindo todos os passos que podem acontecer em situações reais e comprometendo o código:







git git-rm