Moje początkowe zatwierdzenie zawierało niektóre pliki dziennika. Dodałem *log
do mojego .gitignore
, a teraz chcę usunąć pliki dziennika z mojego repozytorium.
git rm mylogfile.log
usunie plik z repozytorium, ale także usunie go z lokalnego systemu plików.
Jak mogę usunąć ten plik z repozytorium bez usuwania mojej lokalnej kopii pliku?
git
repository
remote-server
delete-file
git-rm
mveerman
źródło
źródło
Odpowiedzi:
Z pliku man :
Tak więc dla jednego pliku:
i dla jednego katalogu:
źródło
svn rm --keep-local
.git pull
jeśli jesteś za opóźnieniem pogit rm
git commit -m "Commit message"
igit push
. Jeśli masz inne zmiany etapowe (sprawdź za pomocągit status
), zostaną one również zatwierdzone w tym momencie.git rm --cached mylogfile.log
i usuwam plik z repozytorium. Aby uniknąć utraty pliku w systemie produkcyjnym, wykonuję kopię zapasową pliku i ciągnę po tym. Plik zostanie usunięty, jak wspomniano wcześniej, i należy go skopiować z kopii zapasowej. Jest to dość bolesne, ale nie znalazłem lepszego rozwiązania tego problemu.Aby usunąć cały folder z repozytorium (np. Pliki Resharper):
Popełniłem niektóre pliki resharper i nie chciałem, aby były trwałe dla innych użytkowników projektu.
źródło
Git Push repo branch
aby faktycznie usunąć pliki z pilota.Możesz także usunąć pliki z repozytorium na podstawie swojego .gitignore bez usuwania ich z lokalnego systemu plików:
Lub alternatywnie w Windows Powershell:
źródło
git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"
. Proszę rozważyć modyfikację lub dodanie tego roztworu do odpowiedzi tutaj, ponieważ jest to doskonałe narzędzie, aby ....gitkeep
które zachowują pusty folder w repozytorium. Na przykład..gitignore
zawiera folder,uploads
a repo jest zmuszone do śledzenia.gitkeep
. Usunięcie wszystkich repozytoriów poduploads
nim spowoduje również usunięcie.gitkeep
.Zgodnie z moją odpowiedzią tutaj: /programming/6313126/how-to-remove-a-directory-in-my-github-repository
Aby usunąć folder / katalog lub plik tylko z repozytorium git, a nie z lokalnego, spróbuj 3 prostych kroków.
Kroki, aby usunąć katalog
Kroki, aby zignorować ten folder w kolejnych zatwierdzeniach
Plik .gitignore będzie wyglądał następująco
źródło
Ponadto, jeśli zatwierdziłeś poufne dane (np. Plik zawierający hasła), powinieneś całkowicie usunąć je z historii repozytorium. Oto przewodnik wyjaśniający, jak to zrobić: http://help.github.com/remove-sensitive-data/
źródło
Bardziej ogólne rozwiązanie:
Edytuj
.gitignore
plik.ECHO mylogfile.log >> .gitignore
Usuń wszystkie elementy z indeksu.
git rm -r -f --cached .
Przebuduj indeks.
git add .
Dokonaj nowego zatwierdzenia
git commit -m "Removed mylogfile.log"
źródło
rm --cashed
polega na tym, że w końcu usunie plik, gdy ktoś wyciągnie - prawda? I nie tego ludzie chcą, gdy mówią „Usuń plik z repozytorium bez usuwania go z lokalnego systemu plików ”. Dlaczego powyższe rozwiązanie zostało zaakceptowane, jest poza mną - prawdopodobnie OP działał sam i nigdy się nie wycofał? Dunno. Rozumiem, że github „raz pchany zawsze tam” ofc(Od https://help.github.com/articles/ignoring-files )
Dlatego nie usuwając go, ale ignorując zmiany na zawsze. Myślę, że działa to tylko lokalnie, więc współpracownicy nadal widzą zmiany, chyba że wykonają to samo polecenie jak powyżej. (Wciąż muszę to jednak zweryfikować).
Uwaga: Nie odpowiada to bezpośrednio na pytanie, ale opiera się na dalszych pytaniach w komentarzach innych odpowiedzi.
źródło
Jeśli chcesz po prostu wyśledzić plik i nie usuwać go z lokalnego i zdalnego repozytorium, użyj tego polecenia:
źródło
Powyższe odpowiedzi nie działały dla mnie. użyłem
filter-branch
usuwać wszystkie zatwierdzone pliki.Usuń plik z repozytorium git za pomocą:
Usuń folder z repozytorium git za pomocą:
Spowoduje to usunięcie katalogu lub pliku ze wszystkich zatwierdzeń.
Możesz określić zatwierdzenie, używając:
Lub zakres:
Aby przekazać wszystko zdalnie, możesz:
źródło
git rm -r --cached NAME
jest trik, aby usunąć go z lokalnego repozytorium git i zapobiecZignoruj pliki, usuń pliki z git, zaktualizuj git (do usunięcia).
Uwaga: nie dotyczy to historii wrażliwych informacji.
Ten proces z pewnością wymaga pewnego zrozumienia tego, co dzieje się z git. Z czasem, gdy to osiągnąłem, nauczyłem się wykonywać takie procesy, jak:
1) Zignoruj pliki
.gitignore
aby je zignorować - w wielu przypadkach, takich jak Twój, katalog nadrzędny, nplog/
Będzie wyrażeniem regularnym do użycia..gitignore
zmianę pliku (nie jestem pewien, czy wypychanie wymagało przypomnienia sobie, bez szkody, jeśli zrobiono).2) Usuń pliki z git (tylko).
git remove --cached some_dir/
3) Dodaj i zatwierdź tę zmianę (w gruncie rzeczy jest to zmiana polegająca na „dodawaniu” usuwania rzeczy, pomimo mylącej w przeciwnym razie polecenia „dodawania”!)
git add .
git commit -m"removal"
źródło