У меня возник тот же вопрос, что и здесь: Новый репозиторий git в корневом каталоге для добавления существующего репозитория в подкаталог
Я следовал за этим ответом здесь: Новый репозиторий git в корневом каталоге, чтобы включить существующий репозиторий в подкаталог
Теперь gitk --all
показаны две истории: одна кульминационная в текущем master
, а другая названная original/refs/heads/master
.
Я не знаю, что это за вторая история или как ее удалить из репо. Мне не нужны две истории в моем хранилище.
Как мне от этого избавиться?
Воспроизвести себя:
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'
Теперь у нас есть проблема оригинального плаката. Давайте переместим корень git-репозитория в project-root, используя ответ, связанный выше:
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
Теперь посмотрим на мою текущую проблему:
gitk --all &
git show-ref
Как мне избавиться от refs/original/heads/master
всей связанной истории?
источник
Ответы:
refs/original/*
Это резервная копия на случай, если вы испортите свою ветку фильтра. Поверьте мне, это действительно хорошая идея.После проверки результатов и уверенности в том, что у вас есть то, что вы хотите, вы можете удалить резервную копию ссылки:
или если вы сделали это со многими рефери и хотите стереть все это:
(Это взято непосредственно из страницы ветки фильтра.)
Это не относится к вам, но к другим, которые могут найти это: если вы выполняете ветвь фильтра, которая удаляет контент, занимающий значительное дисковое пространство, вы также можете захотеть запустить
git reflog expire --expire=now --all
иgit gc --prune=now
завершить свои журналы и удалить неиспользуемые объекты , (Предупреждение: полностью, полностью необратимый. Будьте уверены, прежде чем сделать это.)источник
git update-ref -d refs/original/refs/heads/master
git update-ref -d original/refs/heads/master
? Однако у меня работала только ваша вторая команда.git update-ref -d refs/original/refs/heads/master
кстати. Вы можете увидеть полное имя, используяgit show-ref
.git show-ref refs/original/* --hash | xargs -n 1 git update-ref -d
?И если вы в Windows PowerShell:
источник
filter-branch
хранит резервные копии, поэтому репозиторий должен убирать reflogs и собирать мусор. Убедитесь, что вам не нужны эти резервные копии перед удалением:источник