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.
materiały pokrewne
Git — ściągawka
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ł
Następny temat
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.