Meu commit inicial continha alguns arquivos de log. Eu adicionei *log
ao meu .gitignore
e agora quero remover os arquivos de log do meu repositório.
git rm mylogfile.log
removerá um arquivo do repositório, mas também o removerá do sistema de arquivos local.
Como posso remover este arquivo do repositório sem excluir minha cópia local do arquivo?
git
repository
remote-server
delete-file
git-rm
mveerman
fonte
fonte
Respostas:
No arquivo man :
Então, para um único arquivo:
e para um único diretório:
fonte
svn rm --keep-local
.git pull
se você estiver por trás do commit depois #git rm
git commit -m "Commit message"
egit push
. Se você tiver outras alterações em etapas (verifique comgit status
), elas também serão confirmadas no momento.git rm --cached mylogfile.log
e excluo o arquivo do repositório. Para evitar a perda do arquivo no sistema produtivo, faço um backup do arquivo e puxo depois disso. O arquivo é excluído como mencionado anteriormente e precisa ser copiado novamente do seu backup. Isso é bastante doloroso, mas não encontrei uma solução melhor para esse problema.Para remover uma pasta inteira do repositório (como arquivos de novo compartilhador), faça o seguinte:
Eu havia comprometido alguns arquivos de novo compartilhamento e não queria que eles persistissem para outros usuários do projeto.
fonte
Git Push repo branch
para remover os arquivos do controle remoto.Você também pode remover arquivos do repositório com base no seu .gitignore sem excluí-los do sistema de arquivos local:
Ou, alternativamente, no Windows Powershell:
fonte
git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"
. Por favor, considere modificar ou adicionar esta solução para a resposta aqui, porque é uma ótima ferramenta para ter ....gitkeep
que preserva uma pasta vazia no repositório. Por exemplo..gitignore
pastauploads
e o repositório é forçado a acompanhar.gitkeep
. Ao remover tudo do repo sobuploads
ele removerá também.gitkeep
.Conforme minha resposta aqui: /programming/6313126/how-to-remove-a-directory-in-my-github-repository
Para remover a pasta / diretório ou arquivo apenas do repositório git e não do local, tente 3 etapas simples.
Etapas para remover o diretório
Etapas para ignorar essa pasta nas próximas confirmações
O arquivo .gitignore ficará assim
fonte
Além disso, se você confirmou dados confidenciais (por exemplo, um arquivo contendo senhas), exclua-os completamente do histórico do repositório. Aqui está um guia explicando como fazer isso: http://help.github.com/remove-sensitive-data/
fonte
Uma solução mais genérica:
Edite o
.gitignore
arquivo.ECHO mylogfile.log >> .gitignore
Remova todos os itens do índice.
git rm -r -f --cached .
Recrie o índice.
git add .
Fazer nova confirmação
git commit -m "Removed mylogfile.log"
fonte
rm --cashed
é que ela acabará excluindo o arquivo quando você o puxar - certo? E não é isso que as pessoas querem quando dizem "Remover um arquivo do repositório sem excluí-lo do sistema de arquivos local ". Agora, por que a solução acima aceita está além de mim - provavelmente o OP estava trabalhando sozinho e nunca foi puxado? Não sei. Eu entendo o problema do github "uma vez empurrado sempre lá" ofc(Em https://help.github.com/articles/ignoring-files )
Portanto, não a exclua, mas ignore as alterações para sempre. Eu acho que isso só funciona localmente, então os colegas de trabalho ainda podem ver alterações, a menos que executem o mesmo comando acima. (Ainda é necessário verificar isso.)
Nota: Isso não está respondendo diretamente à pergunta, mas é baseado nas perguntas de acompanhamento nos comentários das outras respostas.
fonte
Se você deseja apenas rastrear um arquivo e não excluir do repositório local e remoto, use este comando:
fonte
As respostas acima não funcionaram para mim. Eu costumava
filter-branch
remover todos os arquivos confirmados.Remova um arquivo de um repositório git com:
Remova uma pasta de um repositório git com:
Isso remove o diretório ou arquivo de todas as confirmações.
Você pode especificar uma confirmação usando:
Ou um intervalo:
Para enviar tudo para o controle remoto, você pode:
fonte
git rm -r --cached NAME
é o truque para removê-lo de seu repositório git local e impedi-lo de afetar qualquer um que puxa mais tarde (por excluir o histórico do arquivo ou diretório a partir do git.)Ignore os arquivos, remova os arquivos do git, atualize o git (para a remoção).
Nota: isso não trata do histórico de informações confidenciais.
Esse processo definitivamente requer alguma compreensão do que está acontecendo com o git. Com o tempo, tendo conseguido isso, aprendi a executar processos como:
1) Ignore os arquivos
.gitignore
para ignorá-los - em muitos casos, como o seu, o diretório pai, por exemplolog/
será o regex a ser usado..gitignore
alteração do arquivo (não tenho certeza se o envio é necessário, lembre-se, nenhum dano será feito).2) Remova os arquivos do git (apenas).
git remove --cached some_dir/
3) Adicione e confirme essa alteração (essencialmente, essa é uma alteração para "adicionar" para excluir itens, apesar do comando "adicionar" confuso de outra forma!)
git add .
git commit -m"removal"
fonte