Excluindo vários arquivos do repositório Git que já foram excluídos do disco

Eu tenho um repositório do Git que eu deletei quatro arquivos com rm ( não git rm ), e meu status do Git é assim:

 # deleted: file1.txt # deleted: file2.txt # deleted: file3.txt # deleted: file4.txt 

Como remover esses arquivos do Git sem ter que passar manualmente e adicionar cada arquivo da seguinte maneira:

 git rm file1 file2 file3 file4 

Idealmente, estou procurando algo que funcione como o git add . se possível.

1246
29 янв. Codebeef está pronto 29 de jan 2009-01-29 20:18 '09 às 20:18 2009-01-29 20:18
@ 29 respostas

Para o Git 1.x

 $ git add -u 

Isso significa que o Git rastreia arquivos automaticamente, incluindo a exclusão de arquivos previamente rastreados.

Para git 2.0

Para construir toda a árvore de trabalho:

 $ git add -u :/ 

Para executar apenas o caminho atual:

 $ git add -u . 
2232
10 сент. Resposta dada por carl 10 set 2009-09-10 03:13 '09 às 3:13 em 2009-09-10 03:13
 git ls-files --deleted -z | xargs -0 git rm 
border=0

talvez o que você está procurando .. funciona para mim ..

1339
28 февр. Resposta dada por Varinder em 28 Fev 2011-02-28 23:21 '11 às 11:21 pm 2011-02-28 23:21

Você pode usar

 git add -u 

Para adicionar arquivos excluídos à área de preparação, copie-os

 git commit -m "Deleted files manually" 
726
29 янв. Resposta dada por Cody Caughlan em 29 de jan 2009-01-29 20:25 '09 às 20:25 2009-01-29 20:25

Se você acabou de executar:

 git add -u 

O git atualizará seu índice para saber que os arquivos que você excluiu devem, na verdade, fazer parte do próximo commit. Em seguida, você pode executar "git commit" para verificar essa alteração.

Ou, se você correr:

 git commit -a 

Ele aceitará automaticamente essas mudanças (e quaisquer outras) e as consertará.

Atualize. Se você quiser adicionar apenas arquivos excluídos, tente:

 git ls-files --deleted -z | xargs -0 git rm git commit 
354
10 сент. A resposta é dada por Emil Sit 10 set. 2009-09-10 03:15 '09 at 3:15 am 2009-09-10 03:15

Você pode estar procurando por -A:

 git add -A 

isso é semelhante ao git add -u, mas também adiciona novos arquivos. Isso é aproximadamente equivalente ao addremove hg addremove (embora a detecção de movimento seja automática).

163
29 янв. A resposta é dada por Dustin em 29 de janeiro. 2009-01-29 21:10 '09 às 9:10 pm 2009-01-29 21:10

Para preparar apenas arquivos excluídos:

 for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done 

Ou (método xargs):

 git status | awk '/deleted/ {print $2}' | xargs git rm 

Você pode usar o alias do conjunto de comandos preferencial para uso posterior conveniente.

92
26 нояб. a resposta é dada Saeb Amini 26 de novembro 2011-11-26 13:34 '11 às 13:34 2011-11-26 13:34
 git rm test.txt 

Antes ou depois de excluir o arquivo real.

60
10 сент. Responder Peaker 10 set 2009-09-10 03:13 '09 às 3:13 em 2009-09-10 03:13

Usando o git -add com os parâmetros '--all' ou '--update', você pode obter mais do que queria. Arquivos novos e / ou modificados também serão adicionados ao índice. Eu tenho uma configuração bash alias quando eu quero excluir arquivos excluídos do git sem tocar em outros arquivos:

 alias grma='git ls-files --deleted -z | xargs -0 git rm' 

Todos os arquivos que foram excluídos do sistema de arquivos são adicionados ao índice como excluídos.

48
31 янв. a resposta é dada zobie 31 de janeiro 2009-01-31 07:50 '09 às 7:50 am 2009-01-31 07:50

Não que isso realmente importe, mas eu não concordo com a resposta escolhida:

 git add -u 

... removerá os arquivos do índice se os arquivos correspondentes na árvore de trabalho tiverem sido excluídos, mas também estarão sujeitos ao novo conteúdo modificado dos arquivos monitorados.

 git rm $(git ls-files --deleted) 

... por outro lado, haverá apenas arquivos excluídos rm que foram rastreados.

Então, o último, na minha opinião, a melhor opção.

38
09 апр. Resposta dada por Stephan Tual 09 abr 2012-04-09 14:24 '12 em 2:24 pm 2012-04-09 14:24

Se estas são as únicas mudanças que você pode fazer

 git commit -a 

para confirmar todas as alterações. Isso incluirá arquivos excluídos.

28
29 янв. a resposta é dada por SpoonMeiser 29 de janeiro 2009-01-29 20:29 '09 às 20:29 2009-01-29 20:29
 git ls-files --deleted | xargs git rm 

- A melhor opção para adicionar apenas arquivos excluídos.

Aqui estão algumas outras opções.

 git add . => Add all (tracked and modified)/new files in the working tree. git add -u => Add all modified/removed files which are tracked. git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree. git commit -a -m "commit message" - Add and commit modified/removed files which are tracked. 
19
01 окт. Resposta dada por Sijo Kurian Oct 01 2012-10-01 22:36 '12 às 10:36 pm 2012-10-01 22:36

git add -u

-u --Update Combina apenas os arquivos já rastreados no índice, não na árvore de trabalho. Isso significa que ele nunca criará novos arquivos, mas o novo conteúdo dos arquivos monitorados será alterado e removerá os arquivos do índice se os arquivos correspondentes na árvore de trabalho tiverem sido excluídos.

Caso contrário, o padrão é "."; Em outras palavras, atualize todos os arquivos monitorados no diretório atual e em seus subdiretórios.

15
26 авг. a resposta é dada Obay 26 ago. 2014-08-26 15:24 '14 às 15:24 2014-08-26 15:24

Essa solução simples é ótima para mim:

 git rm $(git ls-files --deleted) 
14
06 нояб. A resposta é dada por Husam Bdr 06 de novembro 2015-11-06 16:32 '15 às 16:32 2015-11-06 16:32

Se você quiser adicioná-lo ao seu .gitconfig , siga estas etapas:

 [alias] rma = !git ls-files --deleted -z | xargs -0 git rm 

Então tudo que você precisa fazer é executar:

 git rma 
10
25 июля '12 в 23:47 2012-07-25 23:47 a resposta é dada por Evan Moran em 25 de julho de 2012 às 23:47 2012-07-25 23:47
 git ls-files --deleted -z | xargs -0 git rm --cached 

Isso excluirá todos os arquivos excluídos que foram rastreados anteriormente usando o git e também manipulará o caso quando houver espaços em seus nomes.

Dependendo da versão POSIX, talvez seja necessário usar xargs -0 -r : isso fará com que os xargs saiam com conteúdo zero.

EDIT: Os --cached e --deleted são usados ​​em conjunto para proteger contra a exclusão acidental de arquivos que ainda não foram excluídos.

8
04 янв. A resposta é dada Murphy Danger 04 Jan. 2014-01-04 23:34 '14 às 23:34 2014-01-04 23:34

Experimente.

 -a --all Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected. git add .  git commit -m -a "Your commit" 

ou

 git add --all  git commit -m "Your commit" 
6
09 марта '15 в 18:05 2015-03-09 18:05 a resposta é dada ilgam Março 09, '15 at 18:05 2015-03-09 18:05

Por favor, use -t para ver qual comando está sendo executado.

Acabei de mudar a resposta da Wyrder para fazer o mesmo:

 git ls-files --deleted -z | xargs -t -0 git rm 
6
17 апр. Resposta dada por Venkateswara Rao em 17 Abr 2016-04-17 18:00 '16 às 18h de 2016-04-17 18:00

O seguinte irá funcionar mesmo se você tiver muitos arquivos para processar:

 git ls-files --deleted | xargs git rm 

Você provavelmente também vai querer deixar um comentário.

Veja mais em: Useful Git scripts

5
24 мая '13 в 16:45 2013-05-24 16:45 a resposta é dada l3x 24 de maio de 2013 às 16:45 2013-05-24 16:45

Nenhum dos flags no git -add irá deletar apenas arquivos deletados; Se tudo que você mudou foram arquivos deletados, então você está bem, mas senão você precisa rodar o git -status e analisar a saída.

Trabalhando a resposta para Jeremy, foi o que consegui:

 git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm 
  • Obter o status do arquivo.
  • Para arquivos excluídos, destaque o nome do arquivo.
  • Exclua todas as linhas que começam com C #, bem como a barra de status com a palavra "excluído"; Eu não me lembro exatamente o que era, e não é mais, então você pode precisar mudá-lo para situações diferentes. Eu acho que o agrupamento de expressões pode ser específico do GNU, então se você não estiver usando o gnutils, você pode precisar adicionar algumas linhas do grep -v .
  • Transferir arquivos para git rm .

Cole isso no alias do shell ...

5
26 июля '09 в 2:41 2009-07-26 02:41 a resposta é dada por Xiong Chiamiov 26 de julho de 2009 às 02:41 2009-07-26 02:41

Como mencionado

 git add -u 

exclui arquivos apagados para exclusão, MAS TAMBÉM os arquivos modificados para atualização.

Para desabilitar arquivos alterados, você pode

 git reset HEAD <path> 

se você quiser que seus commits sejam organizados e limpos.
NOTA: Também pode excluir arquivos excluídos, portanto, tenha cuidado com esses curingas.

4
21 февр. a resposta é dada DarkNeuron 21 de fevereiro 2012-02-21 21:43 '12 às 21:43 2012-02-21 21:43
 git commit -m 'commit msg' $(git ls-files --deleted) 

Funcionou para mim depois que eu deletei os arquivos.

4
05 авг. a resposta é dada Chad 05 ago. 2014-08-05 17:40 '14 às 17:40 2014-08-05 17:40

Eu precisava da mesma coisa e usei o botão git gui "changed changed". ele também adiciona tudo.

E depois da "mudança de palco" eu fiz um "commit" ...

então meu diretório de trabalho é limpo novamente.

3
15 нояб. a resposta é dada por Serdar em 15 de novembro. 2011-11-15 17:29 '11 às 17:29 2011-11-15 17:29

Você pode usar git add -u <filenames> para colocar apenas arquivos excluídos.

Por exemplo, se você excluiu os arquivos templates/*.tpl , use git add -u templates/*.tpl .

-u é necessário para acessar arquivos que existem no repositório, mas não existem mais no diretório de trabalho. Caso contrário, por padrão, git add procurará arquivos no diretório de trabalho e, se você especificar os arquivos excluídos, eles não os encontrarão.

2
07 марта '13 в 4:29 2013-03-07 04:29 a resposta é dada por thomasrutter Março 07 '13 em 4:29 2013-03-07 04:29

(Outra mudança)

Eu queria excluir tudo já excluído dos arquivos de disco, mas de uma pasta específica, deixando as outras pastas intactas. O seguinte funcionou para mim:

 git ls-files --deleted | grep <folder-name> | xargs git rm 
1
23 нояб. resposta dada urbana 23 de novembro 2016-11-23 13:32 '16 às 13:32 2016-11-23 13:32

algo como

 git status | sed -s "s/^.*deleted: //" | xargs git rm 

pode fazer isso.

1
29 янв. Jeremy French answer 29 de janeiro 2009-01-29 20:28 '09 às 20:28 2009-01-29 20:28

Adicionando um alias do sistema para colocar arquivos excluídos como rm-all

alias rm-all='git rm $(git ls-files --deleted)' UNIX alias rm-all='git rm $(git ls-files --deleted)'

WINDOWS doskey rm-all=bash -c "git rm $(git ls-files --deleted)"

Nota

O Windows deve ter o bash instalado.

1
19 февр. A resposta é dada por Haris Krajina em 19 de fevereiro. 2014-02-19 15:16 '14 às 15:16 2014-02-19 15:16

Para um projeto de estúdio visual

 'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 

que é útil quando o caminho do arquivo remoto tem um espaço

0
04 февр. Resposta dada por Sawyer em 04 de fevereiro. 2014-02-04 18:34 '14 às 18:34 2014-02-04 18:34
 git rm $(git ls-files -d) 

Remove todos os arquivos listados pelo git ls-files (-d mostra apenas os arquivos excluídos). Não funciona para arquivos com espaços no nome ou no caminho do arquivo, mas lembre-se

0
10 дек. resposta dada A. Albershteyn 10 dez 2018-12-10 11:19 '18 às 11:19. 2018-12-10 11:19

A solução mais flexível que encontrei até hoje é

 git cola 

E selecione todos os arquivos excluídos que eu quero executar.

(Nota. Eu costumo fazer toda a linha de comando no git, mas o git lida com arquivos deletados um pouco estranhos).

-1
03 окт. A resposta é dada por Broes De Cat em 03 de outubro. 2012-10-03 17:28 '12 às 17:28 2012-10-03 17:28

Outras questões sobre tags or Ask a Question