Pergunta

Eu tenho um repositório git que eu tenha apagado quatro arquivos de usar rm ( não git rm), e os meus Git de estado se parece com isto:

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

Como faço para remover esses arquivos do Git sem ter que ir manualmente através de e adicionar cada arquivo como este:

git rm file1 file2 file3 file4

Idealmente, eu estou procurando algo que funciona da mesma forma que git add . faz, se isso é possível.

Foi útil?

Solução

Para Git 1.x

$ git add -u

Isto diz git para arquivos automaticamente estágio monitorado - inclusive apagando os arquivos previamente rastreados.

Para Git 2.0

Para encenar sua árvore de trabalho inteira:

$ git add -u :/

Para estágio apenas o caminho atual:

$ git add -u .

Outras dicas

git ls-files --deleted -z | xargs -0 git rm 

pode ser o que você está procurando .. ele funciona para mim ..

Você pode usar

git add -u

Para adicionar os arquivos apagados para a área de teste, em seguida, cometê-los

git commit -m "Deleted files manually"

Se você simplesmente executar:

git add -u

git irá atualizar seu índice para saber que os arquivos que você excluídos deve realmente ser parte do próximo commit. Em seguida, você pode executar "git commit" para verificar nessa mudança.

Ou, se você executar:

git commit -a

Isso levará automaticamente essas mudanças (e quaisquer outros) e cometê-los.

Atualização : Se você só quer adicionar arquivos apagados, tente:

git ls-files --deleted -z | xargs -0 git rm
git commit

Você está procurando provavelmente -A:

git add -A

este é semelhante ao u add git, mas também adiciona novos arquivos. Este é aproximadamente o equivalente de comando addremove de hg (embora a detecção de movimento é automático).

Para estágio apenas o Suprimido arquivos:

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

Ou (o caminho xargs):

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

Você pode apelido seu conjunto de comandos preferido para uso posterior conveniente .

git rm test.txt

Antes ou depois de eliminado o arquivo real.

Ao usar git-add com '--all' ou 'opções --update' você pode obter mais do que você queria. Novas e / ou modificados arquivos também serão adicionados ao índice. Eu tenho uma configuração festa alias para quando eu quiser remover arquivos apagados de git sem outros arquivos tocar:

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

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

Não que isso realmente importa, mas eu discordo com a resposta escolheu:

git add -u 

... irá remover arquivos do índice se os arquivos correspondentes na árvore de trabalho foram removidos, mas que também irá sediar os novos conteúdos modificados de arquivos rastreados.

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

... por outro lado, só vai rm os arquivos apagados que foram rastreados.

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

Se essas são as únicas mudanças, você pode simplesmente fazer

git commit -a

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

git ls-files --deleted | xargs git rm 

é a melhor opção para adicionar arquivos somente excluídos.

Aqui está 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.

git add u

-u --atualizar Apenas o jogo contra arquivos já rastreados no índice em vez da árvore de trabalho. Isso significa que ele nunca vai encenar novos arquivos, mas que será palco modificados novos conteúdos de arquivos rastreados e que ele irá remover arquivos do índice se os arquivos correspondentes na árvore de trabalho foram removidos.

Se não for dada, padrão para ""; em outras palavras, atualizar todos os arquivos rastreados no diretório atual e seus subdiretórios.

Essa solução simples funciona bem para mim:

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

Se você quiser adicionar ao seu .gitconfig fazer isso:

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

Então tudo que você tem a fazer é executar:

git rma
git ls-files --deleted -z | xargs -0 git rm --cached

Isto irá remover todos os arquivos excluídos que estavam anterior rastreado por git, bem como lidar com o caso em que seus nomes têm espaços entre eles.

Dependendo da sua variante POSIX, você pode precisar usar xargs -0 -r:. Isso fará com que xargs para sair graciosamente quando o conteúdo nulo encanada

Editar:. Bandeiras --cached e --deleted são usados ??em conjunto para salvaguarda contra a exclusão acidental de arquivos que já não tenham sido excluídos

Tente.

-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"

Utilize -t para ver qual comando está realmente sendo ran

Eu só mexido resposta Virender fazer mesmo:

git ls-files --deleted -z | xargs -t -0 git rm

Nenhuma das bandeiras para git-add só vai encenar arquivos removidos; se tudo que você tenha modificado são arquivos apagados, então você está bem, mas caso contrário, você precisa executar git-status e analisar a saída.

Trabalhando fora da resposta de Jeremy, isso é o que eu tenho:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. Obter status dos arquivos.
  2. Para arquivos apagados, isolar o nome do arquivo.
  3. Remova todas as linhas que começam com # s, bem como uma linha de status que tinha a palavra "excluído" nele; Não me lembro o que era, exatamente, e ele não está lá por mais tempo, então você pode ter que modificar este para diferentes situações. Eu acho que o agrupamento de expressões pode ser uma característica específica de GNU, por isso, se você não está usando gnutils, você pode ter que adicionar várias linhas grep -v.
  4. Passe os arquivos para git rm.

Furar isso em um alias de shell agora ...

Como mencionado

git add -u

encena os arquivos removidos para exclusão, mas também modificado arquivos de atualização.

Para unstage os arquivos modificados você pode fazer

git reset HEAD <path>

Se você gosta de manter seus commits organizado e limpo
NOTA:. isso também poderia unstage os arquivos apagados, tão cuidadoso com esses curingas.

A seguir irá funcionar, mesmo se você tem um monte de arquivos para processo:

git ls-files --deleted | xargs git rm

Você provavelmente também querem se comprometer com um comentário.

Para obter mais informações, consulte: úteis Scripts Git

git commit -m 'commit msg' $(git ls-files --deleted)

Isso funcionou para mim depois que eu já tinha apagado os arquivos.

Eu precisava do mesmo e usado git gui "estágio mudou" botão. ele também adiciona todos.

E depois de "palco mudou" Eu fiz "comprometer" ...

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

Você pode usar git add -u <filenames> para estágio somente os arquivos apagados.

Por exemplo, se você excluiu a templates/*.tpl arquivos, em seguida, usar git add -u templates/*.tpl.

O -u é necessária para se referir a arquivos que existem no repositório, mas já não existem no diretório de trabalho. Caso contrário, o padrão de git add é procurar os arquivos no diretório de trabalho, e se você especificar os arquivos que você tenha excluído lá, não vai encontrá-los.

algo como

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

pode fazê-lo.

Adicionando apelido sistema para o estadiamento arquivos como comando rm-all

eliminada

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

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

Nota

Windows precisa ter bash instalado.

(Ainda outra variação)

Eu queria apagar todos os já apagados dos arquivos de disco, mas a partir de uma pasta específica, deixando as outras pastas intocado. A seguir trabalhou para mim:

git ls-files --deleted  | grep <folder-name> | xargs git rm
git rm $(git ls-files -d)

Remove todos os arquivos listados pelo comando git ls-files (show -d apenas arquivos apagados). Não funciona para arquivos com espaços no nome do arquivo ou caminho, mas simples de lembrar

Para projeto visual studio

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

que é útil quando o caminho do arquivo excluído tem espaço

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

git cola

E selecionar todos os arquivos apagados que eu quero palco.

(Note que eu costumo fazer tudo de comando no git, mas alças git removido arquivos um pouco estranho).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top