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.
Andrew Tomazos
fonte
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.

peflorencio
fonte
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

Wooble
fonte
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.

Sailesh
fonte
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)'
Ian Mackinnon
fonte
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

chet corey
fonte
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.

GameScripting
fonte
8

Você pode usar este comando

git add  `git ls-files --deleted`
gnana jeyam95
fonte
0

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

foreach ($filePath in (git ls-files --deleted)) { git add "$filePath" }
orion elenzil
fonte