git rm file.txt
usuwa plik z repozytorium, ale także usuwa go z lokalnego systemu plików .
Aby usunąć plik z repozytorium i nie usuwać go z lokalnego systemu plików:
git rm --cached file.txt
Poniższa dokładna sytuacja to sytuacja, w której używam git do kontroli wersji witryny mojej firmy, ale katalog „mickey” był folderem tmp do udostępniania prywatnych treści programistom CAD. Kiedy potrzebował OGROMNYCH plików, stworzyłem prywatny niepowiązany katalog i ftpd tam pliki, które mógł pobrać przez przeglądarkę. Zapominając, że to zrobiłem, później wykonałem git add -A
z katalogu podstawowego witryny. Następnie git status
pokazał , że nowe pliki wymagają zatwierdzenia. Teraz musiałem je usunąć ze śledzenia i kontroli wersji gita ...
Przykładowe dane wyjściowe poniżej pochodzą z tego, co mi się przydarzyło, gdzie przypadkowo usunąłem .003
plik. Na szczęście nie dbam o to, co stało się z lokalną kopią .003
, ale niektóre inne obecnie zmienione pliki były aktualizacjami, które właśnie wykonałem na stronie internetowej i byłoby epickie, gdyby zostały usunięte z lokalnego systemu plików! „Lokalny system plików” = strona internetowa na żywo (nie jest to świetna praktyka, ale jest rzeczywistością) .
[~/www]$ git rm shop/mickey/mtt_flange_SCN.7z.003
error: 'shop/mickey/mtt_flange_SCN.7z.003' has local modifications
(use --cached to keep the file, or -f to force removal)
[~/www]$ git rm -f shop/mickey/mtt_flange_SCN.7z.003
rm 'shop/mickey/mtt_flange_SCN.7z.003'
[~/www]$
[~/www]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: shop/mickey/mtt_flange_SCN.7z.001
# modified: shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001 shop/mickey/mtt_flange_SCN.7z.002
[~/www]$
[~/www]$
[~/www]$ git rm --cached shop/mickey/mtt_flange_SCN.7z.002
rm 'shop/mickey/mtt_flange_SCN.7z.002'
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001 shop/mickey/mtt_flange_SCN.7z.002
[~/www]$
[~/www]$
[~/www]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: shop/mickey/mtt_flange_SCN.7z.002
# deleted: shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
# modified: shop/mickey/mtt_flange_SCN.7z.001
[~/www]$
Aktualizacja: Ta odpowiedź zyskuje trochę ruchu, więc pomyślałem, że wspomnę o mojej innej odpowiedzi Git, która ma kilka świetnych zasobów: Ta strona ma grafikę, która pomaga mi w odkrywaniu Git. Książka „Pro Git” jest dostępna online i bardzo mi pomaga.
git rm
jest właściwą odpowiedzią, ale pamiętaj, że plik nadal będzie w historii. Jeśli chcesz usunąć plik, ponieważ zawierał poufne informacje, musisz zrobić coś bardziej drastycznego. (Zmiana historii, szczególnie w przypadku treści, które już opublikowałeś, jest drastycznym działaniem i należy jej unikać, jeśli to możliwe.)