git rm usuwa pliki jednocześnie z dysku (drzewa roboczego) i z poczekalni (indeksu), zapisując to usunięcie jako zmianę gotową do commitu. Różni się od zwykłego rm tym, że Git od razu wie o kasowaniu i nie musisz go potem dodawać do indeksu osobnym poleceniem. Najważniejszy trik: z flagą --cached usuniesz plik tylko ze śledzenia przez Git, ale fizycznie zostawisz go na dysku — to ratunek, gdy przypadkiem dodałeś do repo coś, co nigdy nie powinno tam trafić.
Składnia i najważniejsze opcje
Podstawowa składnia: git rm [opcje] [--] <ścieżka>...
--cached— usuwa plik tylko z indeksu (przestaje być śledzony), zostawia go na dysku.-r— usuwa rekurencyjnie, czyli pozwala skasować cały katalog razem z zawartością.-f,--force— wymusza usunięcie, gdy plik ma zmiany niezapisane w indeksie lub w HEAD.-n,--dry-run— próbny przebieg: pokazuje, co zostałoby usunięte, ale niczego nie kasuje.--ignore-unmatch— kończy z kodem 0, nawet gdy żaden plik nie pasował (przydatne w skryptach).-q,--quiet— nie wypisuje listy usuwanych plików.--— oddziela opcje od ścieżek; ratuje, gdy plik nazywa się np.-r.
Przykłady użycia
git rm stary-plik.txt— usuwa plik z dysku i z indeksu; pogit commitzniknie z repo.git rm --cached config.env— przestaje śledzić plik, ale zostawia go lokalnie; klasyka po dodaniu wpisu do.gitignore.git rm -r logs/— usuwa cały kataloglogswraz z zawartością.git rm -r --cached node_modules/— wyrzuca z repo katalog, który nigdy nie powinien był tam być, ale nie kasuje go z dysku.git rm -n '*.tmp'— pokazuje, które pliki.tmpzostałyby usunięte, bez wykonywania kasowania.
Częste błędy i pułapki
Najczęstsza wpadka: ludzie kasują plik zwykłym rm albo z eksploratora i dziwią się, że Git dalej go widzi jako „usunięty, ale nie zapisany”. Wtedy i tak trzeba zarejestrować zmianę — git rm robi to w jednym kroku. Pamiętaj też, że bez --cached komenda fizycznie kasuje plik z dysku — jeśli nie był wcześniej zacommitowany, odzyskasz go tylko z kopii, bo Git go nie zna.
Drugi haczyk: Git nie pozwoli usunąć pliku, który ma zmiany różniące się od wersji w indeksie i HEAD — chroni cię przed utratą pracy. Dopiero -f to przełamuje, więc używaj go świadomie. Wzorce typu *.log warto brać w apostrofy, żeby to Git je rozwinął rekurencyjnie po śledzonych plikach, a nie powłoka tylko po bieżącym katalogu. I uwaga: git rm działa na plikach śledzonych — do czyszczenia nieśledzonych śmieci służy git clean.
Powiązane komendy: git clean, git mv, git reset, git restore, git checkout, rm.