Eu me comprometo com id 56f06019 (por exemplo). Nesse commit, enviei acidentalmente um arquivo grande (50Mb). Em outro commit, adiciono o mesmo arquivo, mas no tamanho certo (pequeno). Agora meu repo quando clonei é muito pesado :( Como remover aquele arquivo grande do histórico do repo para reduzir o tamanho do meu repo?
113
Respostas:
O capítulo 9 do livro Pro Git tem uma seção sobre como remover objetos .
Deixe-me descrever brevemente as etapas aqui:
Como a opção de rebasing descrita antes,
filter-branch
é a operação de reescrita. Se você publicou a história, você terá que--force
empurrar os novos refs.A
filter-branch
abordagem é consideravelmente mais poderosa do que arebase
abordagem, uma vez quefilter-branch
mantém backups também, então o tamanho do repo não diminuirá imediatamente, a menos que você expire os reflogs e a coleta de lixo:fonte
git filter-branch --force --index-filter 'git rm --ignore-unmatch --cached PathTo/MyFile/ToRemove.dll' -- fbf28b005^..
Entãorm --recursive --force .git/refs/original
erm --recursive --force .git/logs
depois eu usei ogit prune --expire now
egit gc --aggressive
Isso funcionou melhor para mim do que as etapas exatas listadas acima. Obrigado por incluir o link para o livro Git Pro, pois era inestimável.Você pode usar a ferramenta git-extras . O comando obliterate remove completamente um arquivo do repositório, incluindo commits e tags anteriores.
https://github.com/tj/git-extras/blob/master/Commands.md
fonte
Você precisará fazer o rebase do git no modo interativo. Veja um exemplo aqui: Como posso remover um commit no GitHub? e como remover commits antigos .
Se o seu commit está em HEAD menos 10 commits:
Após a edição do seu histórico, você precisa empurrar o "novo" histórico, você precisa adicionar o
+
para forçar (consulte o refspec nas opções de push ):Se outras pessoas já clonaram seu repositório, você irá avisá-los, pois você acabou de alterar o histórico.
fonte
git push --force
ougit push -f
(que não exige que as pessoas conheçam o alvo de push do branch)git rm
no caminho.Tentei usar a seguinte resposta no windows https://stackoverflow.com/a/8741530/8461756
As aspas simples não funcionam no Windows, você precisa de aspas duplas.
Seguir funcionou para mim.
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch PathRelativeRepositoryRoot / bigfile.csv" - --all
Depois de remover o arquivo grande, consegui enviar minhas alterações para o github master.
fonte
Você pode usar um comando simples para excluir
fonte