Como remover arquivos da área de teste do git?

551

Fiz alterações em alguns dos meus arquivos no repositório local e, em seguida, fiz o git add -Aque acho que adicionou muitos arquivos à área de preparação. Como posso excluir todos os arquivos da área de preparação?

Depois de fazer isso, vou fazer manualmente git add "filename".

ómega
fonte
2
Espero que você esteja procurando por isso: stackoverflow.com/questions/1505948/…
sumitb.mdi
27
git statusjá diz exatamente o que fazer se você quiser desestabilizar arquivos.
Michael Foukarakis
6
@MichaelFoukarakis git status não é tão útil se você quiser unstage um diretório inteiro se inunda o terminal com saída (como node_modules)
whiterook6
2
No futuro, em vez de adicionar tudo, convém se acostumar com ( git add -pou git add --patchsão iguais). Esse sinalizador permite selecionar interativamente quais arquivos ou alterações individuais você deseja preparar - você poderá obter uma granulação muito mais fina com o trabalho que você incluir no commit.
Gabe

Respostas:

691

Você pode desestabilizar arquivos do índice usando

git reset HEAD -- path/to/file

Assim como git add, você pode descompactar arquivos recursivamente por diretório e assim por diante; portanto, para descompactar tudo de uma só vez, execute isso no diretório raiz do seu repositório:

git reset HEAD -- .

Além disso, para referência futura, a saída de git statusinformará os comandos que você precisa executar para mover arquivos de um estado para outro.

Ash Wilson
fonte
5
$ git reset HEAD -- .produzido fatal: Failed to resolve 'HEAD' as a valid ref.Note que eu nunca fiz nenhum commit; é o primeiro git adddepoisgit init
Patrizio Bertoni
5
Você também pode usar git reset @.
alex
@alex É melhor do que simplesmente git reset?
Antony Hatchkins
7
@AntonyHatchkins @é sinônimo de HEAD.
Alex
Totalmente funcionou para mim, obrigado!
wayneseymour 11/04
305

Usar

git reset

para desestabilizar todos os arquivos em etapas.

Antony Hatchkins
fonte
3
Posso perguntar como isso difere git reset HEAD --ou é simplesmente uma maneira mais sucinta de executar a mesma operação?
ProNotion 17/01
1
O @ProNotion Reset usa HEADpor padrão. Qual é o propósito daqueles --em seu git reset HEAD --?
Antony Hatchkins
@AntonyHatchkins, deveria ter sido seguido por um ponto final (período) e foi retirado do exemplo na resposta aceita.
ProNotion 22/01
11
@ProNotion Desculpe por ter entendido mal você. git reset HEAD -- .é diferente, pois apenas redefine arquivos no diretório atual e abaixo, enquanto git resetredefine todos os arquivos no projeto.
Antony Hatchkins
101

Se você já cometeu um monte de arquivos indesejados, pode desestabilizá-los e pedir ao git para marcá-los como excluídos (sem realmente excluí-los)

git rm --cached -r .

--cacheddiz para remover os caminhos da preparação e do índice sem remover os próprios arquivos e -ropera nos diretórios recursivamente. Você pode, então, git addqualquer arquivo que deseja acompanhar.

Máx.
fonte
Suponho que seja "git rm -."
Alexander Mills
1
há um erro fatal ao não remover arquivos com "git rm -."
Alexander Mills
@AlexMills Atualizo minha resposta para mencionar as opções reais para rmdesestabilizar todos os arquivos.
Max
2
Eu tentei isso em um arquivo singular como este: "git rm --cached my / file.java" e vejo esse arquivo ainda na área de preparação, mas como excluído! @ Quando você executa esse comando, seus arquivos estão sendo realmente excluídos ou não são testados? Se você não está procurando esse comportamento, eu responderia.
OrwellHindenberg
@OrwellHindenberg obrigado por apontar isso! --cachedé realmente parar de rastrear arquivos que você já confirmou. Portanto, o arquivo não é realmente excluído, mas o git pensa que é. Eu esclareci isso na minha resposta.
Max
30

Você poderia usar

git reset HEAD

depois adicione os arquivos específicos que você deseja com

git add [directory/]filename
Sável
fonte
Você pode adicionar o parâmetro -x e os arquivos ignorados também serão removidos. É útil se você mexer no seu .gitignore e tiver algo útil lá (como no meu caso). ( git-scm.com/docs/git-clean )
Keeprock
1
Com o excesso de pastas, git statusvocê dirá o diretório de trabalho limpo - mentiras! git clean -dffez esse trabalho, obrigado.
Leo
5
Observe que git clean -dfexcluirá os arquivos permanentemente. Em sistemas do tipo UNIX, ele será chamado unlink()e seus arquivos excluídos não serão recuperáveis.
Hanxue 31/05
11
O OP pergunta sobre a desmontagem dos arquivos. Você o aconselha a excluir os arquivos. Eu sugiro que você leia sobre o que é a área de preparação antes de responder.
Antony Hatchkins
Obrigado por excluir todo o meu projeto não salvo.
Vansuita Jr.
7

Como observado em outras respostas, você deve usar git reset. Isso desfará a ação do git add -A.

Nota: git reset é equivalente ao git reset --mixedqual isso

Redefine o índice, mas não a árvore de trabalho (ou seja, os arquivos alterados são preservados, mas não marcados para confirmação) e relata o que não foi atualizado. Esta é a ação padrão. [ git reset ]

Dan Rosenstark
fonte
2
.. e para remover um único arquivo a partir da área de preparo, você pode fazergit reset filenameToNotCommit
SherylHohman
5

Agora, na v2.24.0, sugere

git restore --staged .

para descompactar arquivos.

norixxx
fonte
1

Você pode redefinir a área de preparação de algumas maneiras:

  1. Redefina o HEAD e adicione todos os arquivos necessários para fazer o check-in novamente, como abaixo:

     git reset HEAD ---> removes all files from the staging area
     git add <files, that are required to be committed>
     git commit -m "<commit message>"
     git push 
    
Amit Kaneria
fonte
O que diferencia essa resposta das seis respostas existentes?
Antony Hatchkins
1

Para remover todos os arquivos da área de armazenamento temporário, use -
git reset
Para remover o arquivo específico, use -
git reset "File path"

Akash Bisariya
fonte
1

usar

git reset HEAD

Isso removerá todos os arquivos da área de preparação

Ajith
fonte
1

Se arquivos indesejados foram adicionados à área de preparação, mas ainda não foram confirmados, uma redefinição simples fará o trabalho:

$ git reset HEAD file
# Or everything
$ git reset HEAD .

Para remover apenas alterações não faseadas no diretório de trabalho atual, use:

git checkout -- .
Vlad Bezden
fonte
0

Use " git reset HEAD <file>..." para descompactar arquivos

ex: para desestabilizar todos os arquivos

git reset HEAD .

desestabilizar um arquivo

git reset HEAD nameFile.txt
Amirouche Zeggagh
fonte
-3

Eu tentei todos esses métodos, mas nenhum funcionou para mim. Tirei arquivo .git usando rm -rf .gitforma o repositório local e, em seguida, novamente fez git inite git adde comandos de rotina. Funcionou.

Bhaskar Dhariyal
fonte
4
Lendo os docs git é geralmente mais gratificante do que seguindo o conselho de xkcd.com/1597 ;)
Antony Hatchkins
1
Talvez você tenha um problema de integridade no seu caso específico e essa tenha sido a opção que resta, mas isso não é recomendado.
Shad
Por favor, não faça isso, você destruirá todo o seu repositório Git.
Lennart Rolland
-5

A melhor maneira de desfazer seu arquivo, que já existe na área de teste, é git reset --hard, que recupera seus arquivos. Cuidado agora, isso removerá as mudanças em etapas e em etapas.

dados de pix
fonte
2
Isso é errado e perigoso !!! O OP deseja "apenas adicionar manualmente" os arquivos novamente depois, mas os --hardexclui para sempre.
Antony Hatchkins 13/08/19