git rm

Usuwa pliki z drzewa roboczego i poczekalni.

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; po git commit zniknie 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 katalog logs wraz 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 .tmp został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.