Como remover um diretório do repositório git?

1235

Eu tenho 2 diretórios no meu repositório GitHub. Eu gostaria de excluir um deles. Como eu poderia fazer isso sem excluir e recriar todo o repositório?

Sahat Yalkabov
fonte
1
Existem arquivos nos diretórios?
Fred Foo
3
@ Iarsmans: Sim 6 arquivos. Ambos os diretórios são idênticos, exceto um em maiúsculas e outro em minúsculas.
Sahat Yalkabov

Respostas:

2326

Remova o diretório do git e local

Você pode fazer o checkout 'master' com os dois diretórios;

git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)

Remova o diretório do git, mas NÃO local

Conforme mencionado nos comentários, o que você normalmente quer fazer é remover este diretório do git, mas não excluí-lo totalmente do sistema de arquivos (local)

Nesse caso, use:

git rm -r --cached myFolder
karmakaze
fonte
8
Eu tive a mesma situação exata. Quando eu tentei git rm -r myFolder, funcionou, mas também excluiu tudo do diretório "MyFolder". Teve que reverter tudo no diretório "MyFolder" e depois confirmar.
25412 Justin
240
@Justin Para remover somente a partir de git e filesystem licença como está, usogit rm -r --cached myFolder
karmakaze
32
A mensagem de erro que recebo é: fatal: pathspec 'directory' não encontrou nenhum arquivo.
user2441441
3
@ user2441441 Eu tive esse erro poping quando eu estava tentando remover uma pasta / arquivo que não foi adicionado ao repositório em todos
lukeatdesignworks
3
git rm -r --cached directory/remove apenas do git tracked, mas a estrutura do repositório permanece.
Néstor
287

Para remover a pasta / diretório apenas do repositório git e não do local, tente 3 comandos simples.


Etapas para remover o diretório

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

Etapas para ignorar essa pasta nas próximas confirmações

Para ignorar essa pasta das próximas confirmações, crie um arquivo na raiz chamado .gitignore e coloque o nome dessa pasta nela. Você pode colocar quantas quiser

O arquivo .gitignore ficará assim

/FolderName

remover diretório

eirenaios
fonte
1
Você também precisará executar o git rm -r --cached FolderName git commit -m "Pasta removida do repositório" em seu outro computador e, em seguida, faça um puxão para mantê-lo sincronizado.
6165 Simon
1
Isso excluirá o diretório do ponto em que foi adicionado ao repositório até agora? Ou é apenas para remover o diretório e reenviá-lo para o repositório .git?
alpha_989
1
Ótimo! Trabalhando!
codificadores
2
Bem explicado, boa resposta
Rakshit Shah 25/11/19
1
bem feito. Na minha máquina, o terceiro passo não funciona. Mas funciona se for alterado para $ git push #
211
82

Se, por alguma razão, o que o karmakaze disse não funcionar, você pode tentar excluir o diretório que deseja usar ou com o navegador do sistema de arquivos (por exemplo, no Windows File Explorer). Após excluir o diretório, emitindo o comando:
git add -A
e depois
git commit -m 'deleting directory'
e depois
git push origin master.

cmcculloh
fonte
4
Isso funcionou para mim. Você poderia explicar o argumento -A?
Arun
2
@Arun -A é curto para --all e adicionar as alterações de todos os arquivos rastreados e untracked
Joachim Rohde
Isso funcionou para mim.
UVM
20

Você pode tentar isso: git rm -rf <directory_name>

Isso forçará a exclusão do diretório.

Breen ho
fonte
3
isso também será excluído do diretório local
abdul rehman kk
18

Se você remover os arquivos no diretório (com git rmas outras respostas explicadas), o diretório não existirá mais no que diz respeito ao git. Você não pode confirmar um diretório vazio nem remover um.

Isso é diferente da subversão em que você precisa explicitamente svn rm emptyfolder/, e é por isso que a manpágina do git se descreve como "o estúpido rastreador de conteúdo"

Uma resposta em "Como faço para adicionar um diretório vazio a um repositório git" às perguntas frequentes sobre este assunto :

Atualmente, o design do índice git (área de preparação) permite apenas a listagem de arquivos, e ninguém competente o suficiente para fazer a alteração para permitir diretórios vazios se preocupou o suficiente com essa situação para remediá-la.

Os diretórios são adicionados automaticamente ao adicionar arquivos dentro deles. Ou seja, os diretórios nunca precisam ser adicionados ao repositório e não são rastreados por si mesmos.

Você pode dizer " git add <dir>" e ele adicionará arquivos lá.

Se você realmente precisa que um diretório exista nos caixas, deve criar um arquivo nele. .gitignore funciona bem para esse fim; você pode deixá-lo vazio ou preencher os nomes dos arquivos que você espera que apareçam no diretório

dbr
fonte
9

Eu já havia confirmado a pasta antes e também quero remover o diretório no histórico.

Eu fiz o seguinte:

Adicionar pasta a .gitignore:

echo Folder_Name/ >> .gitignore

Remova de todas as confirmações:

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all

remova os árbitros dos antigos commit:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

Verifique se todas as referências antigas foram totalmente removidas

rm -Rf .git/logs .git/refs/original

Executar uma coleta de lixo

git gc --prune=all --aggressive

envie as alterações para o repositório online:

git push

Você terminou aqui.

Mas você pode fazer o seguinte para enviar todas as alterações para todos os ramos com: Mas tenha cuidado com este comando!

git push origin --all --force
git push origin --tags --force

Depois disso, a pasta foi removida do git, mas não foi excluída do disco local.

Skyborg
fonte
7

para excluir pastas vazias

Eu queria excluir um diretório vazio (pasta) que criei, o git não pode excluí-lo, depois de algumas pesquisas, aprendi que o Git não controla diretórios vazios. Se você tem um diretório vazio em sua árvore de trabalho, basta removê-lo com

rm -r folderName

Não há necessidade de envolver o Git.

Ridha Rezzag
fonte
1
Obrigado! Era exatamente o que eu precisava.
SpyrosKo
6

Vá para o diretório git e digite o seguinte comando: rm -rf < Directory Name >

Após excluir o diretório, confirme as alterações com: git commit -m "Your Commit Message"

Em seguida, basta enviar as alterações no diretório GIT remoto: git push origin < Nome da filial >

anky
fonte
4

Você pode excluir a pasta localmente e pressionar, como a seguir:

git rm -r folder_name
git commit -m "your commit"
git push origin master
estridente
fonte
4

Eu costumo usar git add --allpara remover arquivos / pastas de repositórios remotos

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master pode ser substituído por qualquer outra ramificação do repositório.

ettanany
fonte
2

Você pode usar a Árvore de origem atlasiana (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Basta selecionar arquivos da árvore e pressionar o botão "Remover" na parte superior. Os arquivos serão excluídos do repositório local e do banco de dados git local. Em seguida, confirme e empurre.

Sergey Groshev
fonte
Isto é o que eu faço também. Tornou realmente fácil fazer isso, porém, aprender os comandos git é uma coisa boa a saber.
Micah Montoya
1

Um dos meus colegas sugeriu o BFG Repo-Cleaner, que eu acho poderoso. Não é apenas excluir dados indesejados, mas também limpar seu repositório de qualquer informação de confirmação relacionada.

thanh.h.le
fonte
1

Para adicionar um novo diretório:

mkdir <YOUR-DIRECTORY>

Mas agora o Git não está ciente desse novo diretório, porque o Git mantém o controle de arquivos e não de diretórios.

git status

O Git não estará ciente das alterações que fizemos, por isso, adicionamos um .keeparquivo oculto para que o Git fique ciente dessa nova alteração.

touch /YOUR-directory/.keep

Agora, se você pressionar git statusGit, estará ciente das alterações.

E se você deseja excluir o diretório, você deve usar este comando.

rm -r <YOUR-DIRECTORY>

E se você verificou usando git status, verá que o diretório foi removido.

Abo3atef
fonte
0

O primeiro comando git precisa saber quem você é antes de excluir qualquer coisa

  1. git init
  2. git config user.name "someone"
  3. git config user.email "[email protected]"
  4. git rm -r
  5. git commit -m "excluindo dir"
  6. mestre de origem git push
Zeus
fonte
0

Uma combinação das 2 respostas funcionou para mim

git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push

se ainda mostrar algum aviso, remova os arquivos manualmente

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push
user3821178
fonte