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?

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.


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.


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.


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


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

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


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ął.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.