git nadal wyświetla zmodyfikowane pliki po dodaniu do .gitignore

252

dodaję to do pliku .gitignore

.idea/*

ale tak czy inaczej status to:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

Co ja robię źle ? Dodałem nawet .idea / * do globalnego ~ / .gitignore_global, ale status git, w każdym razie pokazuje mi:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml
Powiedział Kaldybaev
źródło

Odpowiedzi:

422

Twój .gitignoredziała, ale nadal śledzi pliki, ponieważ były już w indeksie.

Aby temu zapobiec, musisz: git rm -r --cached .idea/

Po zatwierdzeniu .idea/katalog zostanie usunięty z repozytorium git, a następujące zatwierdzenia zignorują .idea/katalog.

PS: Możesz użyć .idea/zamiast .idea/*zignorować katalog. Możesz znaleźć więcej informacji na temat wzorów na tej .gitignore manualu .


Pomocny cytat ze strony podręcznika git-rmman

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.
McCl
źródło
Czy mógłbyś wyjaśnić, co masz na myśli przez „Dodanie .idea / też będzie działać”. Czy jest to alternatywne rozwiązanie do używania, .gitignorea następnie robienia git rm -cached?
Mehrad
3
@ Mehrad nie ma potrzeby * w .gitignore
Steve Pitchers
2
Nie, samo dodanie .idea / nie działa, ponieważ, jak powiedziałeś w odpowiedzi, jest już w indeksie.
Henrique de Sousa
15
Więc mówisz, że musisz to zrobić commitpo usunięciu buforowanych plików? To naprawdę wydaje się sprzeczne z intuicją; są to pliki, których NIE chcę zatwierdzać. I nie chcę, aby były usuwane z repozytorium (chcę tylko, żeby nie kręciły się zaśmiecając moje git status). Czy po prostu jestem naprawdę zdezorientowany?
Scott Biggs,
6
Jego pliki były już śledzone przez git z powodu wcześniejszego zatwierdzenia, więc aby je usunąć, musisz utworzyć nowe zatwierdzenie, które usunie je z repozytorium.
mcls,
47

Do osób, które wciąż szukają tego problemu, patrzą tylko na tę stronę.

Pomoże to usunąć buforowane pliki indeksu, a następnie dodać tylko te, których potrzebujesz, w tym zmiany w .gitignorepliku.

1. git rm -r --cached .  
2. git add .
3. git commit -m 'Removing ignored files'

Oto trochę więcej informacji.

  1. To polecenie usunie wszystkie buforowane pliki z indeksu.
  2. To polecenie doda wszystkie pliki oprócz tych wymienionych w gitignore.
  3. To polecenie ponownie zatwierdzi twoje pliki i usunie pliki, które git ma zignorować, ale zachowaj je w katalogu lokalnym.
Sidhanshu_
źródło
1
Było to dla mnie przydatne, chciałbym tylko zauważyć, że w Windows cmd pojedyncze cytaty nie działają w # 3. Jednak użycie git commit -am „Usuwanie zignorowanych plików” działa.
Sundance.101
1
Bez obaw i jeszcze raz dziękuję za jasną i zwięzłą odpowiedź.
Sundance.101,
1
To rozwiązanie naprawdę psuje moje pliki projektu. Po tym wszystkim musiałem cofnąć wszystko.
Fatmajk
1

Rozwiązania oferowane tutaj i w innych miejscach nie działały dla mnie, dlatego dodam do dyskusji dla przyszłych czytelników. Co prawda jeszcze nie w pełni rozumiem tę procedurę, ale w końcu rozwiązałem (podobny) problem i chcę się nim podzielić.

Podczas pracy z git w IntelliJ IDEA w systemie Windows 10 przypadkowo buforowałem niektóre katalogi dokumentów z kilkoma setkami plików, a po dodaniu ich do .gitignore(i PRAWDOPODOBNIE przeniesieniu ich trochę) nie mogłem ich usunąć z domyślnej listy zmian.

Najpierw popełniłem rzeczywiste zmiany, które wprowadziłem, a potem zająłem się ich rozwiązaniem - zajęło mi to zdecydowanie zbyt długo. Próbowałem git rm -r --cached ., ale zawsze się path-specbłędy, z różnymi odmianami path-spec, jak również z -fi -rflagami.

git statusnadal pokazywałby nazwy plików, więc spróbowałem użyć niektórych z nich dosłownie git rm -cached, ale bez powodzenia. Ukrywanie i odblokowywanie zmian wydawało się działać, ale po pewnym czasie znów stały w kolejce (jestem bardzo zamglony, jeśli chodzi o dokładny czas). W końcu usunąłem te wpisy na dobre

git reset

Zakładam, że jest to DOBRY POMYSŁ, gdy nie ma zmian wprowadzonych / buforowanych, które faktycznie chcesz zatwierdzić.

kiloton
źródło
0

Po prostu dodaj git rm -r --cached <folder_name/file_name>

Czasami aktualizujesz plik .gitignore po komendzie zatwierdzania plików. Pliki są buforowane w pamięci. Aby usunąć buforowane pliki, użyj powyższego polecenia.

Abhilash Ramteke
źródło
-2
  1. Dodaj Git.

  2. Status Git // Sprawdź plik, który jest modyfikowany

    // git reset HEAD --- zamień na plik, który chcesz zignorować

  3. git reset HEAD .idea / <- Ci, którzy chcieli wykluczyć .idea przed zatwierdzeniem // git sprawdź status i plik pomysłu zniknie, i jesteś gotowy!

  4. git commit -m ''

  5. git push

Lim Kean Phang
źródło
Byłoby to założenie, że PO chce zresetować.
SovietFrontier