Ось один із способів "відстежувати" будь-які файли, які в іншому випадку будуть ігноровані відповідно до поточного набору шаблонів виключення:
(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --
Це залишає файли у вашому робочому каталозі, але видаляє їх з індексу.
Тут використовується трюк - створити неіснуючий індексний файл для git ls-файлів, щоб він міг відслідковувати файли. Код оболонки вище запитує всі файли, які були б ігноровані, якби індекс був порожнім, а потім видаляє їх із фактичного індексу за допомогою git rm.
Після того, як файли були "не відстежені", використовуйте статус git, щоб переконатися, що нічого важливого не було видалено (якщо так, відрегулюйте шаблони виключення та використовуйте скидання git - шлях до відновлення видаленого запису індексу). Потім зробіть нове зобов’язання, яке не залишає "сирого".
"Сирий" все ще буде в будь-яких старих комісіях. Ви можете використовувати фільтр-гілку git для створення чистих версій старих комітетів, якщо вам справді потрібна чиста історія (nb, використовуючи git filter-branch, "перепише історію", тому її не слід сприймати з легкістю, якщо у вас є співробітники, які витягнули будь-який із ваших історичних зобов’язань після введення «сироїди»).
git rm --cached
каталоги-r
, якщо це корисно