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.


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.


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.


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

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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.