Dodałem plik o nazwie "file1.txt"
do repozytorium Git. Następnie dokonałem tego, dodałem kilka katalogów o nazwach dir1
i dir2
i przekazałem je do repozytorium Git.
Teraz prąd repozytorium ma "file1.txt"
, dir1
i dir2
. Jak mogę usunąć "file1.txt"
bez wpływu na innych, takich jak dir1
i dir2
?
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.)Odpowiedzi:
Zastosowanie
git rm
.Jeśli chcesz usunąć plik z repozytorium Git i systemu plików , użyj:
Ale jeśli chcesz usunąć plik tylko z repozytorium Git i nie usuwać go z systemu plików, użyj:
I wcisnąć zmiany do zdalnego repo
źródło
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ępniegit 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ą) .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.
źródło
git commit -m "Just removing file1.txt"
a następnie, jeśli masz zdalne repozytorium, wypchnij zatwierdzenie czymś takimgit push origin master
.Po pierwsze, jeśli używasz
git rm
, szczególnie w przypadku wielu plików, rozważ, że wszelkie symbole wieloznaczne zostaną rozwiązane przez powłokę, a nie przezgit
polecenie.Ale jeśli plik znajduje się już w GitHub, możesz (od lipca 2013 r.) Bezpośrednio usunąć go z internetowego interfejsu GUI!
Następnie „
git pull
” na lokalnym repozytorium, a to lokalnie usunie plik.Co sprawia, że ta odpowiedź jest (ronda) sposobem na usunięcie pliku z git repo?
(Nie wspominając o tym, że plik na GitHub znajduje się w „git repo”)
(zatwierdzenie będzie odzwierciedlało usunięcie tego pliku):
Ostatnie zdanie oznacza, że usunięty plik jest nadal częścią historii i można go łatwo przywrócić (ale jeszcze nie za pośrednictwem interfejsu internetowego GitHub):
Zobacz „ Przywróć usunięty plik w repozytorium Git ”.
źródło
To jedyna opcja, która działała dla mnie.
Uwaga: Zamień * .sql na nazwę lub typ pliku. Bądź bardzo ostrożny, ponieważ przejdzie to przez wszystkie zatwierdzenia i zgra ten typ pliku.
EDYCJA: uważaj - po tym poleceniu nie będziesz w stanie pchać ani ciągnąć - zobaczysz odrzucenie „niezwiązanej historii”, możesz użyć „git push --force -u origin master” do pchania lub ciągnięcia
źródło
git push --force -u origin master
Dodatkowo, jeśli jest to folder do usunięcia i kolejne foldery lub pliki potomne, użyj:
źródło
Use git rm --cached -r <foldername>
Mówiąc bardziej ogólnie,
git help
pomoże przy co najmniej prostych pytaniach takich jak to:źródło
git help
mylące, ale przydają się proste rzeczy :)rm
ustawia plik do usunięcia niż usuwa z indeksu (choć dla noobów jest to nadal bez znaczenia).Jeśli chcesz usunąć plik z repozytorium, ale zostaw go w systemie plików (zostanie wyśledzony):
Jeśli chcesz usunąć plik z repozytorium i z systemu plików, istnieją dwie opcje:
Jeśli w pliku nie ma zmian wprowadzonych do indeksu:
Jeśli plik ma zmiany wprowadzone w indeksie:
źródło
git rm
od tej chwili usunie tylko plik z tej gałęzi, ale pozostanie on w historii i git go zapamięta.Właściwy sposób to zrobić
git filter-branch
, jak wspomnieli tu inni. Przepisze każde zatwierdzenie w historii oddziału, aby usunąć ten plik.Ale nawet po wykonaniu tej czynności git może to zapamiętać, ponieważ mogą się do niego odnosić w dzienniku zmian, pilotach, tagach i tym podobnych.
Jeśli chcesz całkowicie zniszczyć to w jednym kroku, polecam użyć
git forget-blob
https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/
To proste, po prostu zrób
git forget-blob file1.txt
.Spowoduje to usunięcie wszystkich odwołań, wykonanie
git filter-branch
i uruchomienie gitera,git gc
aby całkowicie pozbyć się tego pliku w repozytorium.źródło
Innym sposobem jest usunięcie pliku z folderu lokalnego za pomocą polecenia rm, a następnie przekazanie zmian do zdalnego serwera.
źródło
Uwaga: jeśli chcesz usunąć plik tylko z git, użyj poniżej:
Jeśli chcesz usunąć również z dysku twardego:
Jeśli chcesz usunąć folder (folder może zawierać kilka plików), powinieneś usunąć go za pomocą polecenia rekurencyjnego, jak poniżej:
Jeśli chcesz usunąć folder w innym folderze
Następnie możesz
commit
ipush
jak zwykle. Jeśli jednak chcesz odzyskać usunięty folder, możesz to zrobić: odzyskiwanie usuniętych plików z git jest możliwe.Przeczytaj więcej na oficjalnym dokumencie.
źródło
Aby usunąć określony plik
Aby wyczyścić wszystkie nieśledzone pliki z katalogu rekurencyjnie w jednym ujęciu
źródło
Jeśli masz aplikację GitHub dla systemu Windows, możesz usunąć plik w 5 prostych krokach:
źródło
W moim przypadku próbowałem usunąć plik na github po kilku zatwierdzeniach, ale zapisać na komputerze
a później ten plik został zignorowany
źródło
Najpierw usuń pliki z lokalnego repozytorium.
lub usuń pliki tylko z lokalnego repozytorium, ale z systemu plików
Po drugie, zatwierdzaj zmiany w lokalnym repozytorium.
Na koniec zaktualizuj / wypchnij lokalne zmiany do zdalnego repozytorium.
źródło
Wypróbowałem wiele sugerowanych opcji i żadna z nich nie działała (nie wymienię różnych problemów). To, co skończyłem, to, co zadziałało, było proste i intuicyjne (dla mnie) było:
źródło
Po usunięciu pliku z repozytorium
git rm
możesz użyć BFG Repo-Cleaner, aby całkowicie i łatwo usunąć plik z historii repo.źródło
Mam pliki obj i bin, które przypadkowo znalazły się w repozytorium, że nie chcę zanieczyszczać mojej listy „zmienionych plików”
Kiedy zauważyłem, że poszli do pilota, zignorowałem je, dodając to do
.gitignore
Problem polega na tym, że są już w trybie zdalnym, a kiedy się zmieniają, pojawiają się jako zmienione i zanieczyszczają listę zmienionych plików.
Aby przestać je widzieć, musisz usunąć cały folder ze zdalnego repozytorium.
W wierszu polecenia:
C:\repos\MyRepo
)C:\repos\MyRepo\SSIS
)git rm -r -f obj
git commit -m "remove obj folder"
Dostałem alarmujący komunikat, że 13 plików zostało zmienionych 315222 usunięć
Ponieważ nie chciałem szukać linii CMD, przeszedłem do Visual Sstudio i wykonałem synchronizację, aby zastosować ją do pilota
źródło
Jeśli chcesz usunąć pliki z określonego rozszerzenia (na przykład skompilowane pliki), możesz wykonać następujące czynności, aby usunąć je wszystkie na raz:
źródło
Zgodnie z dokumentacją .
git rm --cached giant_file
Jeśli chodzi o wrażliwe dane - lepiej nie mówić, że usunąłeś plik, a raczej po prostu dołącz go do ostatniego znanego zatwierdzenia:
0. Zmień ostatnie zatwierdzenie
Jeśli chcesz usunąć plik z całej historii git, zgodnie z dokumentacją powinieneś wykonać następujące czynności:
1. Usuń go z lokalnej historii
3. Jeśli musisz usunąć z pilota
4. Jeśli musisz również usunąć go z wydań tagów:
źródło
Włącz, jeśli nie zapisujesz pliku w lokalnym repozytorium, ale w git repo, a następnie po prostu otwórz plik w git repo przez interfejs sieciowy i znajdź przycisk Usuń w prawym rogu interfejsu. Kliknij tutaj, aby wyświetlić interfejs Usuń opcję
źródło