Eu tenho um repositório Git que excluí quatro arquivos do uso rm
( não git rm
), e meu status Git se parece com o seguinte:
# deleted: file1.txt
# deleted: file2.txt
# deleted: file3.txt
# deleted: file4.txt
Como faço para remover esses arquivos do Git sem ter que passar manualmente e adicionar cada arquivo assim:
git rm file1 file2 file3 file4
Idealmente, estou procurando por algo que funcione da mesma maneira que git add .
se possível.
git
git-commit
git-add
git-rm
Codebeef
fonte
fonte
git rm
, a remoção poderia ter sido de uma ferramenta separada, IDE ou gerenciador de arquivos. O Visual Studio para um pode ser um problema ao remover / renomear arquivos.git rm
é como perguntar por que eles não usamgit vim
ougit cd
. É uma coisa estúpida a ser feita, e o git deve ter um comando ou alias embutido para remover arquivos excluídos da preparação, e você não deve procurar no SO ou ler as páginas de manual no seu horário de almoço.Respostas:
Para Git 1.x
Isso diz ao git para preparar automaticamente os arquivos rastreados - incluindo a exclusão dos arquivos rastreados anteriormente.
Para Git 2.0
Para preparar toda a sua árvore de trabalho:
Para preparar apenas o caminho atual:
fonte
git add -u folder/
para executar esta operação em uma pastapode ser o que você está procurando .. funciona para mim ..
fonte
git ls-files --deleted -z | xargs -0 git rm
Você pode usar
Para adicionar os arquivos excluídos à área de preparação, confirme-os
fonte
Se você simplesmente executar:
O git atualizará seu índice para saber que os arquivos que você excluiu devem realmente fazer parte do próximo commit. Em seguida, você pode executar o "git commit" para verificar essa alteração.
Ou, se você executar:
Ele automaticamente pega essas alterações (e quaisquer outras) e as confirma.
Atualização : se você deseja adicionar apenas arquivos excluídos, tente:
fonte
git commit -a
farei o que eu quero, exceto em alguns casos, tenho arquivos que não quero confirmar, então quero preparar o commit manualmente.Você provavelmente está procurando -A:
isso é semelhante ao git add -u, mas também adiciona novos arquivos. Isso é aproximadamente o equivalente ao
addremove
comando hg (embora a detecção de movimentação seja automática).fonte
Para preparar apenas os arquivos excluídos :
Ou (da maneira xargs):
Você pode alternar o seu conjunto de comandos preferido para uso posterior conveniente.
fonte
xargs
cerca de 15 minutos para dominar.git status | awk '/deleted/ {print $3}' | xargs git rm
seria uma maneira mais curta de fazer isso.grep | awk
... Apenas diga que não.git rm $(git ls-files --deleted)
não é mais conveniente (copiado disso ).git ls-files --deleted | while read f; do git rm $f; done
xargs
é provavelmente mais eficiente que um loop while para uma lista enorme, pois passa mais de um argumento cada vez que é executadogit rm
. Para limitar o número de argumentos passados paragit rm
cada vez que é executado, use a-n
opção:git ls-files --deleted | xargs -n 15 git rm
Antes ou depois de você excluir o arquivo real.
fonte
rm
e me arrependendo mais tarde.git add -u
? Parece que seria mais seguro adicionar os arquivos específicos que foram excluídos ao commit, em vez de adicionar TODAS as alterações.Usando as opções git-add com '--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 de alias do bash para quando eu quero remover arquivos excluídos do git sem tocar em outros arquivos:
Todos os arquivos que foram removidos do sistema de arquivos são adicionados ao índice como excluídos.
fonte
Não que isso realmente importe, mas eu discordo da resposta escolhida:
... removerá os arquivos do índice se os arquivos correspondentes na árvore de trabalho tiverem sido removidos, mas também preparará o novo conteúdo modificado dos arquivos rastreados.
... por outro lado, apenas controlará os arquivos excluídos que foram rastreados.
Portanto, o último, na minha opinião, é a melhor opção.
fonte
Se essas são as únicas alterações, você pode simplesmente fazer
confirmar todas as alterações. Isso incluirá arquivos excluídos.
fonte
é a melhor opção para adicionar apenas arquivos excluídos.
Aqui estão algumas outras opções.
fonte
git add -u
-u --update Corresponde apenas aos arquivos já rastreados no índice, e não na árvore de trabalho. Isso significa que nunca preparará novos arquivos, mas preparará novos conteúdos modificados dos arquivos rastreados e removerá os arquivos do índice se os arquivos correspondentes na árvore de trabalho tiverem sido removidos.
Se não for fornecido, o padrão é "."; em outras palavras, atualize todos os arquivos rastreados no diretório atual e em seus subdiretórios.
fonte
git add -u
. De onde vêm todas as outras coisas da sua resposta, a documentação? Você deve vincular a documentação e citá-la, se houver.Essa solução simples funciona bem para mim:
fonte
Se você quiser adicioná-lo ao seu,
.gitconfig
faça o seguinte:Então tudo que você precisa fazer é executar:
fonte
git config --global alias.rmd '!git ls-files --deleted -z | xargs -0 git rm'
Isso removerá todos os arquivos excluídos que foram rastreados anteriormente pelo git, além de lidar com o caso em que seus nomes de arquivos têm espaços neles.
Dependendo da sua variante POSIX, você pode precisar usar
xargs -0 -r
: isso causaráxargs
a saída seja normal quando o conteúdo nulo for canalizado.EDIT:
--cached
e--deleted
sinalizadores são usados em conjunto para proteger contra a exclusão acidental de arquivos que ainda não foram excluídos.fonte
Diga ao comando para preparar automaticamente os arquivos que foram modificados e excluídos, mas os novos arquivos que você não contou ao Git não são afetados:
ou
fonte
O seguinte funcionará, mesmo se você tiver muitos arquivos para processar:
Você provavelmente também desejará confirmar com um comentário.
Para obter detalhes, consulte: Scripts úteis do Git
fonte
Por favor, use
-t
para ver qual comando está sendo executadoAcabei de ajustar a resposta do Virender para fazer o mesmo:
fonte
Nenhum dos sinalizadores para o git-add armazenará apenas os arquivos removidos; se tudo o que você modificou são arquivos excluídos, tudo bem, mas, caso contrário, você precisa executar o git-status e analisar a saída.
Trabalhando com a resposta de Jeremy, é isso que eu tenho:
grep -v
linhas.git rm
.Colando isso em um apelido de shell agora ...
fonte
Como mencionado
prepara os arquivos removidos para exclusão, MAS TAMBÉM modificou os arquivos para atualização.
Para desestabilizar os arquivos modificados, você pode
se você gosta de manter seus commits organizados e limpos.
NOTA: Isso também pode desestabilizar os arquivos excluídos, portanto, tenha cuidado com esses curingas.
fonte
Isso funcionou para mim depois que eu já havia excluído os arquivos.
fonte
Eu precisava do mesmo e usei o botão "estágio alterado" do git gui. também adiciona tudo.
E depois que "o estágio mudou", fiz "commit" ...
então meu diretório de trabalho está limpo novamente.
fonte
Remove todos os arquivos listados pelo
git ls-files
comando (-d mostra apenas arquivos excluídos). Não funciona para arquivos com espaços no nome do arquivo ou caminho, mas é simples de lembrarfonte
Você pode usar
git add -u <filenames>
para preparar apenas os arquivos excluídos.Por exemplo, se você excluiu os arquivos
templates/*.tpl
, usegit add -u templates/*.tpl
.A
-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ãogit add
é procurar os arquivos no diretório de trabalho e, se você especificar os arquivos excluídos, ele não os encontrará.fonte
Incluindo Alias do Sistema para Disponibilizar Arquivos Excluídos como Comando
rm-all
UNIX
alias rm-all='git rm $(git ls-files --deleted)'
JANELAS
doskey rm-all=bash -c "git rm $(git ls-files --deleted)"
Nota
O Windows precisa ter
bash
instalado.fonte
(Ainda outra variação)
Eu queria excluir todos os arquivos já excluídos dos arquivos do disco, mas de uma pasta específica, deixando as outras pastas intocadas. O seguinte funcionou para mim:
fonte
algo como
pode fazê-lo.
fonte
git diff --diff-filter=D --name-only | xargs git rm
Para projeto visual studio
o que é útil quando o caminho do arquivo excluído tem espaço
fonte
A solução mais flexível que encontrei até agora é
E selecione todos os arquivos excluídos que eu quero preparar.
(Note que eu costumo fazer tudo na linha de comando no git, mas o git lida com os arquivos removidos um pouco estranho).
fonte
git add -u path/to/my/deleted-files-pattern-*.yml
portanto, essa era a melhor resposta para mim (não desejando exibir todos os arquivos excluídos, mas 50 dentre algumas centenas).