git filter-branch --tree-filter оставил мне два объекта коммита

Я сделал это:

git filter-branch --tree-filter '~/fix-lines.sh' -d /dev/shm/repo-temp \
--tag-name-filter cat --prune-empty -- --all

В основном исправление некоторых проблем с окончанием строки. (около 793 коммитов было переписано). Тогда я понял, эй, я мог бы также преобразовать мои вкладки в 4 пробела. Итак, я сделал это:

git filter-branch --tree-filter '~/fix-tabs.sh' -d /dev/shm/repo-temp \
--tag-name-filter cat --prune-empty -- --all

Сейчас я прохожу 1594 коммитов (добавлено несколько новых).

Видимо, все мое старое дерево все еще где-то в git-репо? Если да, то как мне от него избавиться и как проверить, что оно пропало? Я только хочу оставить "оригинал" переписанным ~800 коммитов, и не более.

1 ответ

Решение

Проверьте теги, которые вы, возможно, создали, которые могут помешать старому дереву быть собранным мусором.
А именно, git-filter-branch оставляет теги на исходном дереве нетронутыми и не перемещает их автоматически в новое дерево.

Чтобы избавиться от этого, я сделал такие вещи, как

git push . :refs/original/refs/tags/v1.0.x
git push origin :refs/original/refs/tags/v1.0.5

пока не исчезли все оригинальные и дополнительные теги

Другие вопросы по тегам