Oto jeden ze sposobów „wyśledzenia” plików, które w innym przypadku zostałyby zignorowane w ramach bieżącego zestawu wzorców wykluczania:
(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --
Pozostawia to pliki w katalogu roboczym, ale usuwa je z indeksu.
Sztuczka zastosowana w tym przypadku polega na dostarczeniu nieistniejącego pliku indeksu do plików git ls, aby sądził, że nie ma plików śledzonych. Powyższy kod powłoki pyta o wszystkie pliki, które byłyby ignorowane, gdyby indeks był pusty, a następnie usuwa je z rzeczywistego indeksu za pomocą git rm.
Po „wyśledzeniu” plików użyj statusu git, aby sprawdzić, czy nic ważnego nie zostało usunięte (jeśli tak, dostosuj wzorce wykluczania i użyj git reset - ścieżka, aby przywrócić usunięty wpis indeksu). Następnie dokonaj nowego zatwierdzenia, które pomija „crud”.
„Crud” nadal będzie w jakichkolwiek starych zobowiązaniach. Możesz użyć git filter-branch do stworzenia czystych wersji starych zatwierdzeń, jeśli naprawdę potrzebujesz czystej historii (nb użycie git filter-branch spowoduje „przepisanie historii”, więc nie należy tego podejmować lekko, jeśli masz współpracowników, którzy wyciągnęli którykolwiek z twoich historycznych zobowiązań po wprowadzeniu „surowości” po raz pierwszy).
git rm --cached
całe katalogi z-r
opcją, jeśli jest to pomocne