Como remover arquivos locais (não rastreados) da árvore de trabalho atual do Git?
-
09-06-2019 - |
Pergunta
Como você exclui arquivos locais não rastreados da sua árvore de trabalho atual?
Solução
De acordo com a documentação do Git fique limpo
Remova arquivos não rastreados da árvore de trabalho
O passo 1 é mostrar o que será excluído usando o -n
opção:
# Print out the list of files which will be removed (dry run)
git clean -n
Etapa limpa - cuidado:isso excluirá arquivos:
# Delete the files from the repository
git clean -f
- Para remover diretórios, execute
git clean -f -d
ougit clean -fd
- Para remover arquivos ignorados, execute
git clean -f -X
ougit clean -fX
- Para remover arquivos ignorados e não ignorados, execute
git clean -f -x
ougit clean -fx
Observação a diferença de caso no X
para os dois últimos comandos.
Se clean.requireForce
está definido como "true" (o padrão) em sua configuração, é necessário especificar -f
caso contrário, nada acontecerá de fato.
Veja novamente o git-clean
documentos para obter mais informações.
Opções
-f
,--force
Se a variável de configuração do Git limpa.
-f
,-n
ou-i
.
-x
Não use as regras de ignorar padrão lidas de .gitignore (por diretório) e
$GIT_DIR/info/exclude
, mas ainda use as regras ignoradas fornecidas com-e
opções.Isso permite remover todos os arquivos não rastreados, incluindo produtos de construção.Isso pode ser usado (possivelmente em conjunto com a redefinição do Git) para criar um diretório de trabalho intocado para testar uma construção limpa.
-X
Remova apenas arquivos ignorados pelo Git.Isso pode ser útil para reconstruir tudo do zero, mas mantenha arquivos criados manualmente.
-n
,-dry-run
Na verdade, não remova nada, apenas mostre o que seria feito.
-d
Remova diretórios não rastreados, além de arquivos não rastreados.Se um diretório não rastreado for gerenciado por um repositório GIT diferente, ele não será removido por padrão.Usar
-f
opção duas vezes se você realmente deseja remover esse diretório.
Outras dicas
Usar git clean -f -d
para ter certeza de que diretórios também são removidos.
Você pode então verificar se seus arquivos realmente desapareceram git status
.
Estou surpreso que ninguém tenha mencionado isso antes:
git clean -i
Isso significa interativo e você terá uma rápida visão geral do que será excluído, oferecendo a possibilidade de incluir/excluir os arquivos afetados.No geral, ainda mais rápido do que executar o procedimento obrigatório --dry-run
antes da limpeza real.
Você terá que jogar um -d
se você também quiser cuidar de pastas vazias.No final, é um belo alias:
git iclean
Dito isto, segurar comandos interativos com as mãos pode ser cansativo para usuários experientes.Hoje em dia eu só uso o já mencionado git clean -fd
Se o diretório não rastreado for um repositório git próprio (por exemplo,submódulo), você precisa usar -f
duas vezes:
git clean -d -f -f
Maneira simples de remover arquivos não rastreados
Para remover todos os arquivos não rastreados, a maneira simples é adicione todos eles primeiro e redefinir o repositório como abaixo
git add --all
git reset --hard HEAD
Eu gosto git stash push -u
porque você pode desfazer todos eles com git stash pop
.
EDITAR:Também encontrei uma maneira de mostrar arquivos não rastreados em um esconderijo (por exemplo, git show stash@{0}^3
) https://stackoverflow.com/a/12681856/338986
EDITAR2: git stash save
está obsoleto em favor de push
.Obrigado @script-wolf.
Isso é o que eu sempre uso:
git clean -fdx
Para um projeto muito grande, você pode querer executá-lo algumas vezes.
git-limpo é o que você está procurando.É usado para remover arquivos não rastreados da árvore de trabalho.
Se necessário para remover arquivos não rastreados de um subdiretório específico,
git clean -f {dir_path}
E maneira combinada de excluir diretórios/arquivos não rastreados e arquivos ignorados.
git clean -fxd {dir_path}
depois disso você terá arquivos modificados apenas em git status
.
git clean -fd
remove diretório
git clean -fX
remove arquivos ignorados
git clean -fx
remove arquivos ignorados e não ignorados
pode ser usado todas as opções acima em combinação como
git clean -fdXx
verifique o manual do git para obter mais ajuda
Remova todas as pastas e arquivos extras neste repositório + submódulos
Isso deixa você no mesmo estado do novo clone.
git clean -ffdx
Remova todas as pastas e arquivos extras neste repositório, mas não seus submódulos
git clean -fdx
Remova apenas pastas extras, mas não arquivos (ex.pasta de construção)
git clean -fd
Remova pastas extras + arquivos ignorados (mas não quaisquer arquivos adicionados recentemente)
Se o arquivo não foi ignorado e ainda não foi feito check-in, ele permanece.Observe o X maiúsculo.
git clean -fdX
Novo modo interativo
git clean
OK, excluindo arquivos e pastas não rastreados indesejados são fáceis de usar git
na linha de comando, faça assim:
git clean -fd
Dupla verificação antes de fazer isso, pois irá deletar os arquivos e pastas sem fazer nenhum histórico...
Também neste caso, -f
significa força e -d
significa diretório ...
Então, se você quiser excluir apenas arquivos, você pode usar -f
apenas:
git clean -f
Se você deseja excluir (diretórios) e arquivos, você pode excluir apenas diretórios e arquivos não rastreados como este:
git clean -fd
Além disso, você pode usar -x
flag para incluir os arquivos que são ignorados pelo git.Isso seria útil se você deseja excluir tudo.
E adicionando -i
flag, faz com que o git peça permissão para excluir arquivos um por um em qualquer lugar.
Se você não tiver certeza e quiser verificar primeiro, adicione -n
bandeira.
Usar -q
se você não quiser ver nenhum relatório após a exclusão bem-sucedida.
Também criei a imagem abaixo para torná-la mais memorizável, principalmente porque tenho visto muita gente confundir -f
para limpar a pasta às vezes ou misturar de alguma forma!
Uma maneira melhor é usar:fique limpo
git clean -d -x -f
Isso remove arquivos não rastreados, incluindo diretórios (-d)
e arquivos ignorados por git (-x)
.
Além disso, substitua o -f
argumento com -n
para realizar um dry-run
ou -i
para o modo interativo e ele informará o que será removido.
Abordagem interativa do usuário:
git clean -i -fd
Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/arsdumpgenerator/s3/ [y/N]? y
-i para interativo
-f para força
-d para diretório
-x para arquivos ignorados (adicione se necessário)
Observação: Adicionar -n ou --funcionamento a seco apenas para verificar o que ele fará.
git clean -f -d -x $(git rev-parse --show-cdup)
aplica-se clean ao diretório raiz, não importa onde você o chame na árvore de diretórios do repositório.Eu uso isso o tempo todo porque não te obriga a sair da pasta onde você está trabalhando agora e permite limpar e confirmar direto do local onde você está.
Certifique-se de que as bandeiras -f
, -d
, -x
corresponda às suas necessidades:
-d
Remove untracked directories in addition to untracked files. If an
untracked directory is managed by a different Git repository, it is
not removed by default. Use -f option twice if you really want to
remove such a directory.
-f, --force
If the Git configuration variable clean.requireForce is not set to
false, git clean will refuse to delete files or directories unless
given -f, -n or -i. Git will refuse to delete directories with .git
sub directory or file unless a second -f is given. This affects
also git submodules where the storage area of the removed submodule
under .git/modules/ is not removed until -f is given twice.
-x
Don't use the standard ignore rules read from .gitignore (per
directory) and $GIT_DIR/info/exclude, but do still use the ignore
rules given with -e options. This allows removing all untracked
files, including build products. This can be used (possibly in
conjunction with git reset) to create a pristine working directory
to test a clean build.
Existem outras bandeiras também disponíveis, basta verificar git clean --help
.
Para mim apenas o seguinte funcionou:
git clean -ffdx
Em todos os outros casos, eu estava recebendo mensagem "Ignorando diretório" para alguns subdiretórios.
Um truque para tal situação que acabei de inventar e testar (funciona perfeitamente):
git add .
git reset --hard HEAD
Cuidado! Tenha certeza de confirme todas as alterações necessárias (mesmo em arquivos não rastreados) antes de realizar isso.
Se você deseja apenas excluir os arquivos listados como não rastreados por 'git status'
git stash save -u
git stash drop "stash@{0}"
Eu prefiro isso para 'git limpo' porque 'git limpo' excluirá arquivos ignorados pelo Git, para que sua próxima compilação tenha que reconstruir tudo e você também pode perder suas configurações de IDE.
Para saber o que será excluído antes de excluir:
git clean -d -n
Irá gerar algo como:
Removeria sample.txt
Para excluir tudo listado na saída do comando anterior:
git clean -d -f
Irá gerar algo como:
Removendo sample.txt
Para remover os arquivos não rastreados você deve primeiro usar o comando para visualizar os arquivos que serão afetados pela limpeza
git clean -fdn
Isso mostrará a lista de arquivos que serão excluídos.Agora, para realmente excluir esses arquivos, use este comando:
git clean -fd
Tenha cuidado ao executar o comando `git clean`.
Sempre use -n
antes de executar o comando real, pois ele mostrará quais arquivos seriam removidos.
git clean -n -d
git clean -f -d
Por padrão, git clean
removerá apenas arquivos não rastreados que não são ignorados.Qualquer arquivo que corresponda a um padrão em seu .gitignore ou outros arquivos ignorados não será removido.Se você quiser remover esses arquivos também, você pode adicionar um -x
para o comando limpo.
git clean -f -d -x
Também existe um modo interativo disponível -i
com o comando limpo
git clean -x -i
alternativamente
Se você não tiver 100% de certeza de que excluir seu trabalho não confirmado é seguro, você pode usar o stashing
git stash --all
Ele também limpará seu diretório, mas lhe dará flexibilidade para recuperar os arquivos a qualquer momento usando esconderijo com aplicar ou pop.Posteriormente, você poderá limpar seu estoque usando:
git stash drop // or clean
Normal git clean
comando não remove arquivos não rastreados com meu git version 2.9.0.windows.1
.
$ git clean -fdx # doesn't remove untracked files
$ git clean -fdx * # Append star then it works!
git clean -f to remove untracked files from working directory.
Abordei alguns princípios básicos aqui no meu blog, comandos git-intro-básicos
Comando sugerido para Removendo arquivos não rastreados de documentos git é fique limpo
fique limpo - Remova arquivos não rastreados da árvore de trabalho
Método sugerido: Modo interativo usando git clean -i
para que possamos ter controle sobre isso.vamos ver as opções restantes disponíveis.
Opções disponíveis:
git clean
-d -f -i -n -q -e -x -X (can use either)
Explicação:
1. -d
Remova diretórios não rastreados, além de arquivos não rastreados.Se um diretório não rastreado for gerenciado por um repositório GIT diferente, ele não será removido por padrão.Use a opção -f duas vezes se você realmente deseja remover esse diretório.
2.-f, --força
Se a variável de configuração do Git limpa.
3.-eu, --interativo
Mostre o que seria feito e limpe arquivos de forma interativa.Consulte “Modo interativo” para obter detalhes.
4.-n, --execução a seco
Na verdade, não remova nada, apenas mostre o que seria feito.
5.-q, --quieto
Fique quieto, reporte apenas erros, mas não os arquivos que foram removidos com sucesso.
6.-e, --excluir=
Além dos encontrados no .gitignore (por diretório) e $ git_dir/info/exclui, considere também esses padrões no conjunto das regras ignoradas em vigor.
7.-x
Não use as regras ignoradas padrão lidas de .gitignore (por diretório) e $ git_dir/info/exclua, mas ainda usam as regras ignoradas fornecidas com opções -e.Isso permite remover todos os arquivos não rastreados, incluindo produtos de construção.Isso pode ser usado (possivelmente em conjunto com a redefinição do Git) para criar um diretório de trabalho intocado para testar uma construção limpa.
8.-X
Remova apenas arquivos ignorados pelo Git.Isso pode ser útil para reconstruir tudo do zero, mas manter os arquivos criados manualmente.
Podemos remover facilmente arquivos locais não rastreados da árvore de trabalho git atual usando os comentários git abaixo.
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
Exemplo:
git reset --hard HEAD
Ligações:
Limpe o repositório git e todos os submódulos recursivamente
O comando a seguir limpará o repositório Git atual e todos os seus submódulos recursivamente:
(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)
oh-meu-zsh com zsh fornece esses ótimos aliases por meio do plugin git.Eles também podem ser usados no bash.
gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'
gclean
remove diretórios não rastreados além de arquivos não rastreados.gpristine
Redefinir as mudanças locais, remover diretórios não rastreados, arquivos não rastreados e não use as regras de ignorar padrão lidas em .gitignore (por diretório) e $GIT_DIR/info/exclude, mas ainda use as regras de ignorar fornecidas com as opções -e.Isso permite remover todos os arquivos não rastreados, incluindo produtos de construção.Isso pode ser usado (possivelmente em conjunto com git reset) para criar um diretório de trabalho original para testar uma compilação limpa.
git clean -f
irá remover os arquivos não rastreados do git atual
git clean -fd
quando você deseja remover diretórios e arquivos, isso excluirá apenas diretórios e arquivos não rastreados
Observação:Primeiro navegue até o diretório e verifique o branch que deseja limpar.
-i
modo interativo e dirá o que será removido e você poderá escolher uma ação da lista.
Limpar arquivos apenas [As pastas não serão listadas e não serão limpas]:
$ git clean -i
Limpar arquivos e pastas:
$ git clean -d -i
-d
incluindo diretórios.
Se você escolher c
da lista.Os arquivos/pastas que não forem rastreados serão excluídos e também removerão os arquivos/pastas que você bagunçou.*
Por exemplo:Se você reestruturar a pasta em seu controle remoto e transferir as alterações para seu computador local.arquivos/pastas criados por outros inicialmente estarão na pasta anterior e na nova que você reestrutura.