2011-05-12 3 views
5

Проблема в том, что после того, как ваша ветка delete и push не потеряна навсегда и она все еще находится в репозитории. Я удалил ветку с большим количеством ненужных файлов, но до тех пор, пока она все еще находится где-то в репозитории git, продолжительность команды git clone слишком велика.Как удалить ветку и все объекты, на которые она ссылается

На данный момент единственный способ, который я вижу, - удалить весь репозиторий и воссоздать его, но без лишней ветки.

ответ

4

Я считаю, что git gc --prune=now будет делать то, что вы хотите: очистить ненужные файлы из вашего репозитория.

По умолчанию git gc удаляет недостижимые коммиты старше 2 недель, поэтому добавление --prune=now - это то, что вам нужно.

+0

+1 git gc действительно очистит свободные объекты в репозитории. Однако проблема с клоном, занимающая много времени, связана со старыми версиями файлов, которые все еще находятся в репо. – ralphtheninja

+0

Спасибо за урожай, отредактировал мой вопрос. Я не согласен, если удаленные коммиты недостижимы (что, кажется, так), они будут удалены с помощью 'prune' – CharlesB

+1

. Причина - это рефлок, содержащий ссылки на состояния ваших филиалов, даже если ветви уже удалены. –

3

Вы должны полностью удалить файлы с помощью GIT фильтр-филиал

http://git-scm.com/docs/git-filter-branch

Вы можете сделать много магии с этой командой, следующее удалить имя файла из всех фиксаций:

git filter-branch --tree-filter 'rm -f filename' HEAD 
+0

просто любопытно: если фиксация исчезла, так как ветвь удалена, это не 'git gc' удаление? – CharlesB

+0

@CharlesB: Да, но вы можете использовать git gc --prune = теперь, чтобы избавиться от всех данных. Однако это только данные для локального репозитория и не имеют никакого эффекта при клонировании. Кажется, этот вопрос два раза. – ralphtheninja

Смежные вопросы