Po co używać „git rm” do usuwania pliku zamiast „rm”?

171

W SVN, bezpośrednie usunięcie czegoś z systemu plików (zamiast używania svn) powodowało mnóstwo kłopotów.

Nie stwierdziłem, że jest to problem podczas używania git, ale zauważam, że git ma swoją własną rmimplementację ( git rm).

Jaka jest różnica między rmi git rm?

cjm2671
źródło

Odpowiedzi:

253

Jeśli po prostu używasz rm, będziesz musiał kontynuować z git add <fileRemoved>. git rmrobi to w jednym kroku.

Możesz także użyć polecenia, git rm --cachedktóre usunie plik z indeksu (umieszczając go w celu usunięcia przy następnym zatwierdzeniu), ale zachowaj swoją kopię w lokalnym systemie plików.

Andy
źródło
Dobra odpowiedź. Byłem w stanie użyć, git reset --harda następnie wykonać checkout mastera, aby wyjść z odłączonej głowy, ponieważ wiedziałem, że nie mam żadnych niezatwierdzonych zmian. Jeśli nie zatwierdziłeś zmian, możesz chcieć zrobić git stash, ale jestem stosunkowo nowy w git, więc nie znam dokładnego polecenia. Jeśli przyjechałeś tu w 2014 roku lub później, mam nadzieję, że ta odpowiedź była dla Ciebie przydatna.
Eric Hepperle - CodeSlayer2010,
@Andy - Jeśli użyłem rm(zamiast git rm) i usunąłem wiele plików przy jego użyciu, a teraz nie chcę gitich śledzić. Czy istnieje sposób na cofnięcie zmian? Chcę, gitaby moje zdjęcie zostało rmusunięte, ponieważ nie używałem git rmw pierwszej kolejności.
Chetan Arvind Patil
Byłoby miło, gdyby zostało to jasno określone w dokumentach online (może tam być, ale oczywiście nie jest to oczywiste lub to pytanie nie zostałoby zadane). Byłoby miło, gdyby użytkownicy wiedzieli, że nie robią nic złego, jeśli wybierają trasę rm systemu operacyjnego. I są powody, aby wybrać drogę systemu operacyjnego. Np. Jeśli musisz usunąć plik, aby sprawdzić, czy coś działa przed zatwierdzeniem zmiany, trasa systemu operacyjnego jest nieco bezpieczniejsza niż użycie git rm, tak jak w przypadku git musisz zdestestować akcję, podczas gdy w opcji systemu operacyjnego po prostu masz przynieść (wierzę).
bob
12

Usuwanie plików za pomocą rmnie jest problemem per se, ale jeśli potem chcesz potwierdzić, że plik został usunięty, będziesz musiał to zrobić i git rmtak, więc równie dobrze możesz to zrobić w ten sposób od razu.

Ponadto, w zależności od Twojej powłoki, git rmpo usunięciu pliku nie otrzymasz uzupełniania tabulatorami, więc będziesz musiał samodzielnie przeliterować ścieżkę, podczas gdy jeśli git rmplik nadal istnieje, uzupełnianie kart będzie działać normalnie.

hammar
źródło
7

git rmusunie plik z indeksu i katalogu roboczego (tylko z indeksu, jeśli był używany --cached), tak aby usunięcie było przemieszczane do następnego zatwierdzenia.

manojlds
źródło
4

Jeśli jednak w końcu użyjesz rm zamiast git rm. Możesz pominąć dodawanie git i bezpośrednio zatwierdzić zmiany za pomocą:

git commit -a

Struggler
źródło
3

Usuń pliki z indeksu lub z drzewa roboczego i indeksu. git rm nie usunie pliku tylko z katalogu roboczego.

Oto, jak możesz usunąć plik za pomocą, rm -fa następnie usunąć go z indeksu za pomocągit rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

Jednak możesz to wszystko zrobić za jednym razem, używając tylko git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html
basicxman
źródło
2

Kiedy używasz git rm, usunięcie będzie częścią twojego następnego zatwierdzenia. Więc jeśli chcesz wprowadzić zmianę, powinieneś użyć git rm

keis
źródło
2

Dodając do odpowiedzi Andy'ego, istnieje dodatkowe narzędzie do git rm:

  1. Bezpieczeństwo : git rmzamiast tego rmGit zablokuje usunięcie, jeśli wystąpi rozbieżność między HEADwersją pliku a indeksem pomostowym lub wersją drzewa roboczego. Ten blok jest mechanizmem zabezpieczającym , który zapobiega usuwaniu trwających zmian.

  2. Zabezpieczenia : git rm --dry-run. Ta opcja jest zabezpieczeniem, które wykona git rmpolecenie, ale w rzeczywistości nie usunie plików. Zamiast tego wyświetli pliki, które by usunął.

Joe
źródło