Preparando arquivos excluídos


499

Digamos que eu tenha um arquivo no meu repositório git chamado foo.

Suponha que ele tenha sido excluído com rm(não git rm). Em seguida, o status do git mostrará:

Changes not staged for commit:

    deleted: foo

Como preparo essa exclusão de arquivo individual?

Se eu tentar:

git add foo

Diz:

'foo' did not match any files.

2
Isso foi um problema nas versões antigas do Git? Hoje em dia não parece ser um, funciona de maneira semelhante aos arquivos modificados.
cst1992

Respostas:


22

Desde o Git 2.0.0, git addtambém será feita a exclusão de arquivos.

Docs do Git 2.0.0 - git-add

<pathspec>…

Arquivos para adicionar conteúdo. Podem ser fornecidos filtros de arquivo (por exemplo, * .c) para adicionar todos os arquivos correspondentes. Também é possível fornecer um nome de diretório principal (por exemplo, dir para adicionar dir / arquivo1 e dir / arquivo2) para atualizar o índice para corresponder ao estado atual do diretório como um todo (por exemplo, especificar dir dirá não apenas um arquivo dir / file1 modificado na árvore de trabalho, um arquivo dir / file2 foi adicionado à árvore de trabalho, mas também um arquivo dir / file3 removido da árvore de trabalho. Note que versões mais antigas do Git costumavam ignorar arquivos removidos; use a opção --no-all se você deseja adicionar arquivos modificados ou novos, mas ignore os removidos.


A resposta aceita não resolve o problema - e a outra é mais complicada desde o Git 2.0.0 - é a melhor maneira! Você tem o meu voto positivo
João Antunes

519

Use git rm foopara preparar o arquivo para exclusão. (Isso também excluirá o arquivo do sistema de arquivos, se não tiver sido excluído anteriormente. É claro que pode ser restaurado a partir do git, pois foi feito o check-in anteriormente.)

Para preparar o arquivo para exclusão sem excluí-lo do sistema de arquivos, use git rm --cached foo


8
Além disso, você pode adicionar --cachesinalizador para remover o arquivo apenas do repositório e deixar o toque no sistema de arquivos.
Hauleth 11/09/12

Qual seria o processo para desfazer essa operação, ou seja, desestabilizar o arquivo para exclusão? Isso é possível?
longda 22/09/13

82
Na verdade, o OP perguntou como preparar o arquivo já_excluído e isso pode ser feito por git status | grep 'deleted:' | cut -d':' -f2 | xargs -t -I {} git add -u "{}". Outras respostas parecem mostrar como preparar a remoção de arquivos corretamente (mas não como preparar os arquivos já excluídos). ps. o xargscomando baseado funciona para mim no Ubuntu 12.04, no entanto, quando eu o faço manualmente git add -u deleted_file.txt, não funciona. Meu git é 1.7.9.5
Dimitry K

8
@DimitryK: preparará git rmum arquivo para exclusão, mesmo se ele já tiver sido excluído do sistema de arquivos. E, como aponta o comentário do OP em outra resposta, eles queriam preparar um arquivo específico que já foi excluído.
Wooble

3
git rmnão prepara arquivos já removidos. Ele lança este erro: fatal: pathspec '~.SLDASM' did not match any files. Aqui estão as telas com prova: i.imgur.com/cKNKGGe.png i.imgur.com/1p9JdWF.png . A primeira captura de tela mostra claramente que 2 arquivos são excluídos e não testados, a segunda captura de tela mostra que, quando eu digito git rm "~$Box.SLDASM", gera esse erro.
KulaGGin

413

Mesmo que seja correto usar git rm [FILE], como alternativa, você poderia fazer git add -u.

De acordo com a git-adddocumentação:

-u --update

Atualize o índice exatamente onde ele já possui uma entrada correspondente a [FILE]. Isso remove e modifica as entradas do índice para corresponder à árvore de trabalho, mas não adiciona novos arquivos.

Se nenhum [FILE] for fornecido quando a opção -u for usada, todos os arquivos rastreados em toda a árvore de trabalho serão atualizados (versões antigas do Git usadas para limitar a atualização ao diretório atual e seus subdiretórios).

Após o qual o índice será atualizado e os arquivos serão preparados temporariamente.


56
Sim git add -A .adicionará todas as alterações, eu queria especificamente criar um arquivo excluído.
Andrew Tomazos

25
Isso adicionará todos os arquivos modificados; Não apenas arquivos excluídos.
Foreever

3
Está correto. Mais especificamente, ele preparará todas as alterações nos arquivos já rastreados, excluídos ou modificados. Isso ajuda quando você exclui vários arquivos e não deseja prepará-los individualmente.
Sailesh

9
Existe uma maneira de preparar apenas arquivos excluídos e não modificados? Apenas curioso.
agosto

11
Eu fiz git add -u FolderWithDeletedFiles/e ele fez o que eu quero, obrigado
parlamento

158

Para preparar todos os arquivos excluídos manualmente, você pode usar:

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

Para adicionar um alias a este comando como git rm-deleted, execute:

git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)'

2
a notação $ () aparentemente não existe no console do windows bash, levando aunknown option `deleted)
Félix Gagnon-Grenier

2
Eu não acho que isso funcione se você tiver espaços em seu caminho também. Pelo menos, não está no meu sistema (com zsh).
21816 Wil Shipley

3
Funcionou perfeitamente para mim! Fiz exatamente o que eu precisava. ENORME apreciação aqui!
RedSands

No windows dofor /F %I in ('git ls-files --deleted') do git add -u %I
eis

3
isso não funciona para nomes de arquivos com espaços, 'git add -u', se necessário.
precisa

33

adicionar todos os arquivos excluídos prontos

git status -s | grep -E '^ D' | cut -d ' ' -f3 | xargs git add --all

obrigado verificar para se certificar

git status

você deve estar pronto para ir


5
Confirmando que isso funciona. Eu acho que a lição aqui, porém, é não fazer rm <file>, mas simgit rm <file>
DanGordon

1
FYI: corte em espaços faz com que problemas se todos os caminhos têm espaços entre eles
davis

1
isso não funciona para nomes de arquivos com espaços, 'git add -u', se necessário.
precisa

Funciona perfeitamente para mim git version 2.15.2 (Apple Git-101.1).
Kalob Taulien

funciona perfeitamente no console linux!
Ahmed AMMOURI

8

Você pode usar

git rm -r --cached -- "path/to/directory"

para preparar um diretório excluído.



0

para aqueles que usam git 2.x + no PowerShell:

foreach ($filePath in (git ls-files --deleted)) { git add "$filePath" }
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.