Usuń istniejący plik z repozytorium Git

Odpowiedzi:

143

Wystarczy, że od razu udzielę pełnej odpowiedzi:

  1. from klemens: Musisz dodać plik do swojego .gitignore pliku gdzieś nad niepożądanym plikiem w repozytorium. to znaczy

    $ cd $ cat >> .gitignore development.log Cd

  2. od m. narebski: Następnie musisz usunąć plik z repozytorium, wykonując polecenie „ git rm --cached <file>i zatwierdzając to usunięcie”

Jeśli miałeś również nadzieję, że repozytorium wygląda tak, jakby nigdy nie śledził tego pliku, jest to znacznie bardziej skomplikowane i wysoce zniechęcające, ponieważ nie tylko tworzy zupełnie nowe zatwierdzenia dla każdego pojedynczego zatwierdzenia w historii, niszcząc w ten sposób interoperacyjność w nieprzyjemny sposób między innymi osobami, które sklonowały Twoje repozytorium, ale także pozostawia wszystkie te zatwierdzenia niesprawdzone (zakładając, że przetestujesz swoje zatwierdzenia przed ich wykonaniem).

Mając to na uwadze, narzędziem, którego szukasz, jeśli taki jest Twój cel, jest filter-branch. Pierwszy przykład robi dokładnie to, co opisuję.

Tim Visher
źródło
3
Wydaje się, że użycie git rm --cached nie tylko usunęło go z mojej gałęzi, ale kiedy ściągam do innego systemu, usuwa fizycznie pliki w tym systemie. Masz pojęcie, co się tam dzieje?
biagidp
2
W odpowiedzi na powyższe: Myślę, że problem polegał na tym, że nie miałem pliku .gitignore w alternatywnym systemie przed ściągnięciem zmian, więc usunięcie usunęło lokalną kopię. Przynajmniej taka jest teoria
biagidp
53

Aby zatrzymać śledzenie pliku, po prostu użyj git rm --cached <filename>.

Ale jak zauważyli inni tutaj, dodanie pliku do .gitignore może zapobiec przypadkowemu dodaniu go później.

kusma
źródło
1

dodaj plik gitignore.

zobacz http://git-scm.com/docs/gitignore

fetzig
źródło
13
To tylko połowa odpowiedzi. .gitignorewpisy nie dotyczą plików, które są już śledzone.
CB Bailey
10
Druga część dotyczy git rm --cached <file>usunięcia.
Jakub Narębski
1
Dlaczego nie ma prostego polecenia dla git, aby ponownie ocenić wszystkie aktualnie śledzone pliki zgodnie z bieżącym plikiem .gitignore? ... czy też jest to zbyt dużo zdrowego rozsądku? : p
Alexander - Przywróć Monikę