git zeigt weiterhin Dateien an, die nach dem Hinzufügen zu .gitignore geändert wurden

252

Ich füge dies zur .gitignore- Datei hinzu

.idea/*

aber trotzdem ist der status:

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

Was mache ich falsch ? Ich habe sogar .idea / * zum globalen ~ / .gitignore_global hinzugefügt, aber der Git-Status zeigt mir trotzdem:

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

Antworten:

422

Ihr .gitignorearbeitet, aber es verfolgt immer noch die Dateien, weil sie bereits im Index waren.

Um dies zu stoppen, müssen Sie Folgendes tun: git rm -r --cached .idea/

Wenn Sie ein Commit durchführen, wird das .idea/Verzeichnis aus Ihrem Git-Repository entfernt und die folgenden Commits ignorieren das .idea/Verzeichnis.

PS: Sie könnten ein Verzeichnis verwenden, .idea/anstatt es .idea/*zu ignorieren. Sie können weitere Informationen über die Muster auf finden die .gitignore Manpage .


Hilfreiches Zitat aus der git-rmManpage

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.
mcls
quelle
Würden Sie bitte erklären, was Sie mit "Nur .idea hinzufügen / würde auch funktionieren" gemeint haben. Ist dies eine alternative Lösung zu verwenden .gitignoreund dann zu tun git rm -cached?
Mehrad
3
@ Mehrad keine Notwendigkeit für die * in .gitignore
Steve Pitchers
2
Nein, nur das Hinzufügen von .idea / funktioniert nicht, da es, wie Sie in der Antwort gesagt haben, bereits im Index enthalten ist.
Henrique de Sousa
15
Sie sagen also, dass Sie commitnach dem Entfernen der zwischengespeicherten Dateien müssen? Das scheint wirklich kontraintuitiv zu sein; Dies sind Dateien, die ich NICHT festschreiben möchte. Und ich möchte nicht, dass sie aus dem Repository gelöscht werden (ich möchte nur, dass sie nicht länger herumhängen und meine überladen git status). Oder bin ich nur wirklich verwirrt?
Scott Biggs
6
Seine Dateien wurden aufgrund eines früheren Commits bereits von git verfolgt. Um sie zu entfernen, müssen Sie ein neues Commit erstellen, das sie aus dem Repository entfernt.
mcls
47

Die Personen, die möglicherweise noch nach diesem Problem suchen, sehen sich nur diese Seite an.

Auf diese Weise können Sie zwischengespeicherte Indexdateien entfernen und nur die benötigten Dateien hinzufügen, einschließlich Änderungen an Ihrer .gitignoreDatei.

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

Hier ein bisschen mehr Infos.

  1. Dieser Befehl entfernt alle zwischengespeicherten Dateien aus dem Index.
  2. Dieser Befehl fügt alle Dateien außer den in genannten hinzu gitignore.
  3. Dieser Befehl schreibt Ihre Dateien erneut fest und entfernt die Dateien, die git ignorieren soll. Behalten Sie sie jedoch in Ihrem lokalen Verzeichnis.
Sidhanshu_
quelle
1
Dies war nützlich für mich, ich würde nur bemerken, dass in Windows cmd die einfachen Anführungszeichen in # 3 nicht zu funktionieren scheinen. Verwenden von git commit -am "Ignorierte Dateien entfernen" Funktioniert jedoch.
Sundance.101
1
Keine Sorge, und nochmals vielen Dank für die klare und prägnante Antwort.
Sundance.101
1
Diese Lösung bringt meine Projektdateien wirklich durcheinander. Ich musste danach alles zurücksetzen.
Fatmajk
1

Die hier und an anderen Orten angebotenen Lösungen haben bei mir nicht funktioniert, daher werde ich die Diskussion für zukünftige Leser ergänzen. Ich verstehe das Verfahren zwar noch nicht vollständig, habe aber endlich mein (ähnliches) Problem gelöst und möchte es teilen.

Ich hatte versehentlich einige Dokumentverzeichnisse mit mehreren hundert Dateien zwischengespeichert, als ich mit git in IntelliJ IDEA unter Windows 10 arbeitete, und nachdem ich sie hinzugefügt hatte .gitignore(und sie wahrscheinlich ein wenig verschoben hatte), konnte ich sie nicht aus der Standard-Änderungsliste entfernen.

Ich habe zuerst die tatsächlichen Änderungen vorgenommen, die ich vorgenommen hatte, und dann die Lösung gefunden - ich habe viel zu lange gebraucht. Ich habe es versucht, bekam git rm -r --cached .aber immer path-specFEHLER, mit verschiedenen Variationen der path-specsowie mit den -fund -rFlags.

git statuswürde immer noch die Dateinamen anzeigen, also habe ich versucht, einige dieser wörtlich mit zu verwenden git rm -cached, aber kein Glück. Das Verstecken und Entstapeln der Änderungen schien zu funktionieren, aber sie wurden nach einiger Zeit wieder in die Warteschlange gestellt (ich bin ein bisschen verschwommen im genauen Zeitrahmen). Ich habe diese Einträge endgültig entfernt

git reset

Ich gehe davon aus, dass dies nur dann eine gute Idee ist, wenn Sie keine Änderungen vorgenommen haben, die Sie tatsächlich festschreiben möchten.

Kilotonnen
quelle
0

Einfach hinzufügen git rm -r --cached <folder_name/file_name>

Manchmal aktualisieren Sie die Gitignore-Datei nach dem Festschreibungsbefehl für Dateien. Die Dateien werden also im Speicher zwischengespeichert. Verwenden Sie den obigen Befehl, um die zwischengespeicherten Dateien zu entfernen.

Abhilash Ramteke
quelle
-2
  1. Git hinzufügen.

  2. Git-Status // Überprüfen Sie die Datei, die geändert wird

    // git reset HEAD --- Ersetze die Datei, die du ignorieren möchtest

  3. git reset HEAD .idea / <- Diejenigen, die .idea vor dem Festschreiben ausschließen wollten // git check status und die Ideendatei sind verschwunden und Sie können loslegen!

  4. git commit -m ''

  5. Git Push

Lim Kean Phang
quelle
Dies wäre eine Annahme, die das OP zurücksetzen möchte.
Sowjetische Grenze