Desfazer "git add <dir>"?

186

Por engano, adicionei arquivos usando o comando "git add dir". Ainda não executei o "git commit". Existe uma maneira de remover esse diretório e tudo o que está contido nele do commit?

Eu tentei git reset dir, mas não funcionou. Aparentemente, git reset fileé o caminho para desfazê-lo. Mas tenho tantos arquivos e tão pouco tempo.

neoneye
fonte
6
git reset <path>atualiza o índice para esse caminho para que ele corresponda HEAD(a confirmação atual). Não toca na árvore de trabalho.
Cascabel

Respostas:

279

Para remover um diretório e tudo o que está dentro dele do índice,

git rm --cached -r dir

O --cachedcomutador git rmopera apenas no índice e não toca na cópia de trabalho. O -rinterruptor torna recursivo.

Aristóteles Pagaltzis
fonte
12
"Remover todo o diretório temporário do índice" seria uma explicação um pouco melhor do comando git, pois para iniciantes do git como eu, o comando se parece muito com se ele pudesse excluir o diretório no sistema de arquivos. Apenas por questão de gosto.
Sascha Gottfried
1
É por isso que eu tinha colocado o --cachedbotão em negrito . No entanto, editei a resposta para qualificar que ela se aplica apenas ao índice.
Aristóteles Pagaltzis
@SaschaGottfried Obrigado pelo esclarecimento, eu estava assustado no primeiro, mesmo com a edição, mas o seu comentário deixou claro :)
Max von Hippel
quase apaguei minha pasta inteira: S depois disso ... fazendo git reset HEAD foldertudo corrigido ... mas antes de fazer isso, faça um git status foldere verifique se ele 'excluiu' todos os arquivos dessa pasta
Bengalaa
21

Você vai querer usar git rm --cached -r <dir>. este comando removerá o conteúdo do diretório em etapas do índice.

se o diretório já foi rastreado, você precisa encontrar arquivos novos e antigos manualmente e descompactá-los ...

Provavelmente execute git reset <dir>depois disso para redefinir os arquivos existentes (e já rastreados) dentro do diretório.


Atualização 2019:

Simplesmente execute git reset directory, ele desestabilizará todos os arquivos adicionados recentemente.

knittl
fonte
não está git reset <dir>sozinho o suficiente?
Bananach 17/05/19
@ Bananach Acabei de tentar e parece que sim, git reset <dir>também funcionaria. A resposta é de 2011, então não tenho certeza se isso já funcionou há 8 anos. Vou atualizar a resposta. Obrigado pela dica!
knittl
11

Use finde xargs:

find dir -type f | xargs git reset
moinudin
fonte
11

Diretório Unstage

$ git reset <dir>

Desestágena todos os arquivos e pastas que eu disponibilizei:

$ git add <dir>

Confirmar diretório sem estágio

Para confirmar a remoção do diretório e seu conteúdo da preparação (por exemplo, "Alterações a serem confirmadas"), execute o seguinte:

$ git status

ou

$ git diff --staged --name-only 

para confirmar que nenhuma das pastas ou arquivos previamente preparados ainda está pronta.

mrduncle1
fonte
2

Um comando simples para remover um arquivo / pasta em etapas, que ainda não foi confirmado, é - git restore --staged <dir>.

insira a descrição da imagem aqui

Tofan Jena
fonte