Como remover arquivos locais (não rastreados) da árvore de trabalho atual do Git?

StackOverflow https://stackoverflow.com/questions/61212

  •  09-06-2019
  •  | 
  •  

Pergunta

Como você exclui arquivos locais não rastreados da sua árvore de trabalho atual?

Foi útil?

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 ou git clean -fd
  • Para remover arquivos ignorados, execute git clean -f -X ou git clean -fX
  • Para remover arquivos ignorados e não ignorados, execute git clean -f -x ou git 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!


deleting unwanted untracked files and folder

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 -ipara 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:

  1. https://git-scm.com/docs/git-reset
  2. Como uso 'git reset --hard HEAD' para reverter para um commit anterior?
  3. Redefina a ramificação do repositório local para ser igual ao HEAD do repositório remoto
  4. https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html

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.

  1. Limpar arquivos apenas [As pastas não serão listadas e não serão limpas]:$ git clean -i

  2. 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.

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