Close

Git RM

Podczas oswajania z system Git często pada pytanie: „Jak przekazać systemowi Git, aby już nie śledził pliku lub plików?”. Polecenie git rm służy do usuwania plików z repozytorium Git. Można je traktować jako odwrotność polecenia git add.


Omówienie git rm


Polecenia git rm można użyć do usunięcia pojedynczych plików lub ich kolekcji. Podstawową funkcją git rm jest usuwanie śledzonych plików z indeksu Git. Dodatkowo polecenia git rm można użyć do usuwania plików zarówno z indeksu przechowalni, jak i katalogu roboczego. Nie ma możliwości usunięcia pliku tylko z katalogu roboczego. Pliki objęte poleceniem muszą być identyczne względem plików w bieżącym wskaźniku HEAD. Jeśli istnieje rozbieżność między wersją pliku w HEAD a indeksem przechowalni lub wersją z drzewa roboczego, Git zablokuje usunięcie. Blokada ta stanowi mechanizm bezpieczeństwa zapobiegający usuwaniu zmian w toku.

Polecenie git rm nie usuwa gałęzi. Dowiedz się więcej o używaniu gałęzi git

Użycie


<file>…​

Określa pliki docelowe do usunięcia. Wartością opcji może być pojedynczy plik, lista plików rozdzielonych spacją file1 file2 file3 lub wzorzec glob (~./directory/*).

-f
--force

Opcja -f służy do pominięcia kontroli bezpieczeństwa, którą Git wykonuje, aby się upewnić, że pliki w HEAD są zgodne z bieżącą zawartością indeksu przechowalni i katalogu roboczego.

Logo Git
materiały pokrewne

Git — ściągawka

Logo Bitbucket
POZNAJ ROZWIĄZANIE

Poznaj środowisko Git z rozwiązaniem Bitbucket Cloud

-n
--dry-run

Opcja rozruchu testowego „dry-run” stanowi zabezpieczenie pozwalające wykonać polecenie git rm bez faktycznego usuwania plików. Zamiast tego zostaje wyświetlona lista plików, które miałyby zostać usunięte.

-r

Opcja -r oznacza „tryb rekurencyjny”. Podczas pracy w trybie rekurencyjnym git rm usuwa katalog docelowy i całą jego zawartość.

--

Separator służy do wyraźnego oddzielenia listy nazw plików od argumentów przekazywanych do git rm. Jest to przydatne w przypadku nazw plików przypominających opcje poleceń.

--cached

Opcja „cached” oznacza, że usunięcie powinno objąć wyłącznie indeks przechowalni. Pliki katalogu roboczego pozostaną nietknięte.

--ignore-unmatch

Ta opcja powoduje zakończenie polecenia ze statusem sigterm 0 nawet wtedy, gdy pliki nie zostaną dopasowane. Jest to kod statusu systemu Unix. Kod 0 oznacza pomyślne wywołanie polecenia. Opcja --ignore-unmatch może być pomocna w przypadku używania git rm jako części większego skryptu powłoki, który ma się zakończyć mało problematycznym niepowodzeniem.

-q
--quiet

Opcja „quiet” pozwala ukryć wynik polecenia git rm. Standardowo polecenie wyświetla jeden wiersz dla każdego usuniętego pliku.

Jak cofnąć git rm


Wykonanie git rm nie powoduje zmian trwałych. Polecenie aktualizuje indeks przechowalni i katalog roboczy. Zmiany te nie zostają utrwalone, dopóki nie zostanie utworzony nowy commit, a zmiany nie zostaną dodane do historii commitów. Oznacza to, że omawiane zmiany można „cofnąć” za pomocą standardowych poleceń Git.

git reset HEAD

Polecenie „reset” powoduje przywrócenie bieżącego indeksu przechowalni i katalogu roboczego z powrotem do commitu HEAD. Oznacza to cofnięcie efektów polecenia git rm.

git checkout .

Wyewidencjonowanie daje ten sam efekt i przywraca najnowszą wersję pliku z HEAD.

W przypadku wykonania polecenia git rm i utworzenia nowego commitu utrwalającego usunięcie można użyć polecenia git reflog, aby znaleźć odwołanie do stanu sprzed wykonania git rm. Dowiedz się więcej na temat polecenia git reflog.

Dyskusja


Argument w ramach polecenia może mieć postać dokładnej ścieżki, wzorca glob lub konkretnej nazwy katalogu. Polecenie powoduje usunięcie wyłącznie ścieżek obecnie zatwierdzonych w repozytorium Git.

Użycie wzorca glob wiąże się z wyszukiwaniem na wszystkich poziomach katalogów. Należy zachować ostrożność korzystając z tego rozwiązania. Rozważmy przykłady: directory/* i directory*. Pierwsze rozwiązanie spowoduje usunięcie wszystkich plików podrzędnych z katalogu directory/, podczas gdy drugie doprowadzi do usunięcia wszystkich katalogów równorzędnych, takich jak directory1 directory2 directory_whatever, co może wywołać nieoczekiwane skutki.

Zakres git rm


Polecenie git rm działa tylko w obrębie bieżącej gałęzi. Zdarzenie usunięcia zostaje zastosowane wyłącznie do drzew katalogu roboczego i indeksu przechowalni. Usunięcie plików nie zostaje utrwalone w historii repozytorium do momentu utworzenia nowego commitu.

Dlaczego warto używać git rm zamiast rm


Repozytorium Git rozpozna, gdy standardowe polecenie powłoki rm zostanie wykonane na śledzonym pliku. Zaktualizuje wtedy katalog roboczy, aby odzwierciedlić usunięcie. Nie uwzględni usunięcia w indeksie przechowalni. Aby dodać zmiany do indeksu przechowalni, konieczne będzie wykonanie dodatkowego polecenia git add względem usuniętych ścieżek plików. Polecenie git rm stanowi skrócenie procedury w tym sensie, że aktualizuje katalog roboczy i indeks przechowalni wraz z usunięciem.

Przykłady


git rm Documentation/\*.txt

W tym przykładzie używamy wzorca glob do usunięcia wszystkich plików *.txt, które są podrzędne względem katalogu Documentation, oraz wszystkich jego podkatalogów.

Gwiazdka * jest w tym przykładzie poprzedzona ukośnikami, aby zapobiec rozciągnięciu wzorca. Wzorzec powoduje rozszerzenie zakresu na ścieżki plików i podkatalogi w katalogu Documentation/.

git rm -f git-*.sh

W tym przykładzie używamy opcji force — obejmuje wszystkie pliki pasujące do wzorca git-*.sh . Opcja force powoduje jednoznaczne usunięcie plików docelowych zarówno z katalogu roboczego, jak i indeksu przechowalni.

Jak usunąć pliki, które nie znajdują się już w systemie plików


Jak wspomniano powyżej w akapicie „Dlaczego warto używać git rm zamiast rm”, polecenie git rm jest w rzeczywistości wygodnym rozwiązaniem, stanowiącym połączenie standardowego polecenia rm z git add i służącym do usunięcia pliku z katalogu roboczego oraz rozszerzenia tej operacji na indeks przechowalni. W repozytorium może nastąpić bałagan w przypadku, gdy kilka plików zostanie usuniętych wyłącznie za pomocą standardowego polecenia rm.

Gdy mamy zamiar zarejestrować wszystkie jawnie usunięte pliki jako część następnego commitu, do dodania wszystkich zdarzeń usunięcia do indeksu przechowalni na potrzeby przygotowania następnego commitu można użyć polecenia git commit -a.

Jeśli chcemy jednak trwale pozbyć się plików usuniętych za pomocą polecenia rm, należy użyć następującego rozwiązania:

git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

Spowoduje to wygenerowanie wykazu usuniętych plików z katalogu roboczego i jego przesłanie do git rm --cached, czego skutkiem będzie uaktualnienie indeksu przechowalni.

Git rm — podsumowanie


Polecenie git rm działa na dwóch podstawowych drzewach zarządzania stanem wewnętrznym Git: na katalogu roboczym i indeksie przechowalni. Polecenie to służy do usuwania plików z repozytorium Git. Jest to wygodna metoda łącząca efekty standardowego rm z git add. Oznacza to, że cel zostanie najpierw usunięty z systemu plików, a następnie zdarzenie usunięcia zostanie dodane do indeksu przechowalni. Polecenie to jest jednym z wielu, jakich można użyć do cofania zmian w systemie Git.


Udostępnij ten artykuł

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ludzie współpracujący przy ścianie pełnej narzędzi

Blog Bitbucket

Ilustracja DevOps

Ścieżka szkoleniowa DevOps

Demonstracje funkcji z ekspertami Atlassian

Zobacz, jak Bitbucket Cloud współpracuje z Atlassian Open DevOps

Zapisz się do newslettera DevOps

Thank you for signing up