Eu tive a mesma pergunta que fiz aqui: Novo repositório git no diretório raiz para incluir um repositório existente em um subdiretório
Segui esta resposta aqui: Novo repositório git no diretório raiz para incluir um repositório existente em um subdiretório
Agora, gitk --all
mostra duas histórias: uma culminando com a atual master
e outra com o nome original/refs/heads/master
.
Não sei o que é essa segunda história ou como removê-la do repositório. Não preciso de dois históricos no meu repositório.
Como faço para me livrar dele?
Para se reproduzir:
mkdir -p project-root/path/to/module
cd project-root/path/to/module
mkdir dir1 dir2 dir3
for dir in * ; do touch $dir/source-file-$dir.py ; done
git init
git add .
git commit -m 'Initial commit'
Agora temos o problema do pôster original. Vamos mover a raiz do repositório git para raiz do projeto usando a resposta vinculada acima:
git filter-branch --tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 dir3 path/to/module' HEAD
rm -rf path
cd ../../../ # Now PWD is project-root
mv path/to/module/.git .
git reset --hard
Agora, veja meu problema atual:
gitk --all &
git show-ref
Como faço para me livrar refs/original/heads/master
e todo o histórico associado?
fonte
Respostas:
refs/original/*
existe como backup, caso você estrague seu ramo de filtro. Acredite em mim, é uma muito boa ideia.Depois de inspecionar os resultados e ter certeza de que tem o que deseja, você pode remover a referência de backup:
ou se você fez isso com muitos árbitros e deseja apagar tudo:
(Extraído diretamente da página de manual do filtro).
Isso não se aplica a você, mas a outras pessoas que podem achar isso: Se você faz uma ramificação de filtro que remove o conteúdo que ocupa muito espaço em disco, também poderá executar
git reflog expire --expire=now --all
egit gc --prune=now
expirar seus reflogs e excluir os objetos agora não utilizados . (Aviso: completamente, totalmente irreversível. Tenha muita certeza antes de fazê-lo.)fonte
git update-ref -d refs/original/refs/heads/master
git update-ref -d original/refs/heads/master
? No entanto, apenas seu segundo comando funcionou para mim.git update-ref -d refs/original/refs/heads/master
btw. Você pode ver o nome completo usandogit show-ref
.git show-ref refs/original/* --hash | xargs -n 1 git update-ref -d
?E se você estiver no Windows PowerShell:
fonte
filter-branch
mantém backups para que o repositório precise limpar reflogs e coleta de lixo. Verifique se não há necessidade desses backups antes da exclusão:fonte