Warum erkennt git nicht, dass meine Datei geändert wurde, daher funktioniert git add nicht


93

Ich versuche, meine Dateien mit bash auf github zu verschieben. Sie sind bereits dort und ich lade eine neuere Version mit neuen Zeilen und Code usw. hoch. Aber wenn ich es versuche git addund dann git statusheißt es:

Auf Zweigstamm

nichts zu begehen, Arbeitsverzeichnis sauber

Und die Datei, die ich verwende, wurde gerade geändert.


4
Wenn Sie bereits ein Commit durchgeführt haben, müssen Sie nichts festschreiben. Überprüfen Sie das Git-Protokoll.
Grady Player

2
Was ist die Ausgabe von Git Diff?
Maazza

2
@maazza Ich bekomme nichts aus Git Diff
Somerandomguy

Wenn git diff(oder git status) nichts anzeigt, was erklärt, warum nichts hinzuzufügen ist. Die Frage ist also wirklich: "Warum erkennt Git nicht, dass meine Datei geändert wurde?"
Sunil D.

Sorry Leute, ich sehe, was passiert. Git sieht nicht, dass Visual Studio C # es geändert hat, aber es sieht, wenn etwas anderes es geändert hat, wie Notepad ++
Somerandomguy

Antworten:


121

Ich hatte ein Problem, bei dem ich den Git-Index für meine Datei auf "unverändert" gesetzt habe.

Sie können git anweisen, Änderungen an der Datei nicht mehr zu ignorieren:

git update-index --no-assume-unchanged path/to/file

Wenn dies nicht hilft, kann ein Zurücksetzen für andere seltsame Fälle ausreichen.


In der Praxis habe ich festgestellt, dass die zwischengespeicherte Datei entfernt und auf Funktion zurückgesetzt wurde:

git rm --cached path/to/file
git reset path/to/file

Dies git rm --cachedbedeutet, dass nur die Datei aus dem Index entfernt wird und resetgit angewiesen wird, den git-Index vom letzten Commit neu zu laden.


15
git add -f path/to/the/fileDie Dateien werden festgeschrieben, um sie festzuschreiben.
San

2
Diese Antwort war die einzige, die zur Behebung meines Problems beigetragen hat. Ich bin mir nicht sicher, ob das eine Windows-Sache ist (ich hatte in der Vergangenheit noch nie solche Probleme, weder unter OSX noch unter Linux). Also danke an @ThorSummoner. Übrigens habe ich git add -fdie Datei ausprobiert, die sich in diesem Zustand "unverändert annehmen" befand, und sie hat nicht funktioniert - musste entweder git update-indexoder git rm --cachedgefolgt von a git reset, damit sie funktioniert.
Rsenna

1
Wenn Sie sich über Ihren aktuellen Repo-Status nicht sicher sind, tun Sie Folgendes: git rm --cached -r .und dann git reset ..
Rsenna

Es gibt noch eine andere Möglichkeit zu versuchen, git update-index --no-skip-worktree path/to/fileso habe ich mein Problem gelöst
Fr0sT

1
Arbeitete für mich, aber ja nur einzelne Aktenfälle.
Thomas Cheng

24

Überprüfen Sie Ihre .gitignoreDatei . Möglicherweise stimmen die Datei oder die Erweiterung der Datei oder der Pfad zu der Datei, mit der Sie arbeiten .gitignoremöchten, mit einem Eintrag in überein , der erklärt, warum diese Datei ignoriert wird (und nicht als geänderte Datei erkannt wird).

Dies stellte sich für mich heraus, als ich ein ähnliches Problem hatte.


Fügen Sie weitere Erklärungen hinzu. das wird anderen helfen.
Amit Joshi

1
Ich habe gitignore.io verwendet , um meinen .gitignore zu generieren, und ich habe eine Zeile gefunden, mit lib/der git diesen Ordner ignoriert. Das ist kein Problem - zumindest wenn dieser Ordner nicht der Hauptordner Ihres Projekts ist, wie es mir passiert ist.
Paladini

Und für jeden in meinem Fall war es tatsächlich meine globale Ausschlussdatei
vpzomtrrfrt

Das hat zunächst nicht funktioniert. Aber ich habe es zum Laufen gebracht. In meinem Fall wurde die zu ignorierende Sache zweimal in der Gitignore-Datei erwähnt. Suchen Sie immer nach allen Vorkommen und ersetzen Sie alle.
MasterJoe

8

Wie bereits besprochen, wurden die Dateien wahrscheinlich mit "unverändert annehmen" gekennzeichnet, was git grundsätzlich mitteilt, dass Sie die Dateien nicht ändern werden, sodass Änderungen nicht mit ihnen verfolgt werden müssen. Dies kann jedoch mehrere Dateien betreffen. Wenn es sich um einen großen Arbeitsbereich handelt, möchten Sie möglicherweise nicht alle Dateien einzeln überprüfen. In diesem Fall können Sie versuchen: git update-index --really-refresh

gemäß den Dokumenten:

Like --refresh, but checks stat information unconditionally, without regard to the "assume unchanged" setting.

Grundsätzlich wird git gezwungen, Änderungen aller Dateien unabhängig von den Flags "Unverändert annehmen" zu verfolgen.


1
Für mich git statusheißt es, dass keine Dateien geändert werden, sondern git add .zwei Dateien hinzugefügt werden und git update-index --really-refreshdass diese beiden aktualisiert werden müssen, aber anscheinend nichts bewirken. Irgendeine Idee?
someonewithpc

2
Der Git-Status ignoriert Dateien mit dem Flag "Unverändert annehmen". Wenn Sie jedoch git update-index --really-refresh verwenden, wird dieses Flag gelöscht und die Dateien werden nun angezeigt. Versuchen Sie erneut, den Git-Status auszuführen, um festzustellen, ob die Änderungen jetzt geändert werden. Wenn Sie nichts sehen, folgen Sie diesem Beitrag: stackoverflow.com/questions/2363197/… vor allem der Befehl zum Anzeigen einer Liste von Dateien mit den Annahmen-nochanges: git ls-files -v | grep '^[[:lower:]]'Wenn nichts hilft, sollten Sie eine Frage mit weiteren Details erstellen, damit wir Ihnen helfen können Sie.
André Cunha

7

Nun, wir haben nicht genug, um diese Frage zu beantworten, also werde ich Ihnen einige Vermutungen geben:

1) Sie haben Ihre Änderungen gespeichert, um den Typ zu korrigieren: git stash pop

2) Sie hatten Änderungen und Sie haben sie festgeschrieben. Sie sollten in der Lage sein, Ihr Festschreiben in zu sehen git log

3) Sie hatten Änderungen, die auf die eine git reset --hardoder andere Weise vorgenommen wurden. Ihre Änderungen befinden sich möglicherweise im Reflog. Geben Sie ein, git reflog --allgefolgt vom Auschecken oder Auswählen des Schiedsrichters, falls Sie ihn jemals finden.

4) Sie haben dasselbe Repo mehrmals ausgecheckt und befinden sich im falschen.


1) kein Versteck gefunden 2) Ich hatte Änderungen und habe festgeschrieben, kann ich also erneut festschreiben? 3) Ich habe das nicht getan 4) Ich bin im richtigen Repo
Somerandomguy

Wenn Sie Änderungen hatten und diese festgeschrieben haben, können Sie mit dem nächsten Schritt fortfahren, Push ausführen oder was auch immer Ihr Workflow ist ... Sie können erneut festschreiben, wenn Sie weitere Änderungen haben. Sie können sogar git commit --amendfestlegen, welche Änderungen Ihre neuen Änderungen in Ihr letztes Festschreiben übernehmen Tun Sie das nicht, wenn Sie Ihr Commit bereits geteilt haben.
Grady Player

Das Schließen und erneute Öffnen des Terminals hat es für mich erledigt, nachdem ich ein Projekt-Repo gereinigt hatte.
Eddie

6

Klingt verrückt, aber manchmal bist du nicht im richtigen Repo, obwohl du denkst, dass du es bist. Möglicherweise haben Sie das übergeordnete Verzeichnis verschoben, aber vergessen, die Repos in Ihrem Texteditor zu wechseln. Oder umgekehrt: Sie befinden sich im richtigen Editor im Texteditor, aber im falschen Repo in der Befehlszeile. In der ersten Situation nehmen Sie Ihre Änderungen in der richtigen Datei vor, aber es ist nicht derselbe Ordner, der in Ihrer Befehlszeile geöffnet ist, also ist es tatsächlich die falsche Datei. In der zweiten Situation haben Sie tatsächlich die richtige Datei bearbeitet, aber Ihr Befehlszeilen-Git erkennt die Änderung nicht, da Sie sich nicht im richtigen Verzeichnis in der Befehlszeile befinden.


4

Hatte so eine funky Sache passiert. Das Git-Plugin von Eclipse Kepler hat automatisch alle meine Projektordner als im .gitignore-Ordner ignoriert markiert.

Wenn ich commitauf die TeamSpeisekarte kam, wurden sie alle wieder ignoriert. Soweit ich das beurteilen kann, lag dies daran, dass ich sie als im übergeordneten Projekt abgeleitet festgelegt hatte. Deaktivieren Sie diese als derviedbehoben. Ich hatte das noch nie auf Indigo gesehen. Hoffe es hilft jemandem.


Haben Sie eine Idee, wie dieses Problem behoben werden kann, wenn es in Intellij auftritt?
MasterJoe

3

Dies ist unter Windows beim Ändern von Dateien durch Übertragen von Unterschieden über das WinMerge-Tool geschehen. Anscheinend aktualisiert WinMerge (zumindest so, wie es auf meinem Computer konfiguriert ist) manchmal nicht die Zeitstempel der Dateien, die es ändert.

Unter Windows verwendet der Git-Status unter anderem den Zeitstempel einer Datei und Änderungen der Dateigröße, um festzustellen, ob sich eine Datei geändert hat oder nicht. Da der Zeitstempel nicht aktualisiert wurde, hatte er nur die Dateigröße. Leider war die fragliche Datei eine einfache Versionsdatei, bei der der Inhalt von 7.1.2 auf 7.2.0 geändert wurde . Mit anderen Worten blieb auch die Dateigröße unverändert. Andere Dateien, die ebenfalls von WinMerge geändert wurden und deren Zeitstempel nicht aktualisiert wurden, aber nach der Änderung eine andere Größe hatten, wurden vom Git-Status in Ordnung erkannt .


3

Ich hatte ein ähnliches Problem bei der Verwendung von Sublime Text-3 . Nachdem ich neue Änderungen am Code vorgenommen und ihn gespeichert hatte, lautete die Antwort beim Versuch, die Befehle git add ./status zu verwenden, "Zweig bereits auf dem neuesten Stand". Ich habe herausgefunden, dass die Datei unabhängig vom Speichern der Aktualisierungen im Texteditor tatsächlich unverändert war. Das Öffnen der Datei in einem anderen Editor und das Speichern der Änderungen hat bei mir funktioniert.


Das passiert mir auch
Kloar

2

TL; DR; Sind Sie überhaupt im richtigen Repository?

Meine Geschichte ist ein bisschen lustig, aber ich dachte, es kann mit jemandem passieren, der vielleicht ein ähnliches Szenario hat, also teile es hier.

Eigentlich auf meinem Rechner hatte ich zwei separate git Repositories repo1und repo2in demselben Stammverzeichnis namens konfiguriert source. Diese beiden Repositorys sind im Wesentlichen die Repositorys von zwei Produkten, die ich in meinem Unternehmen ab und zu arbeite. Nun ist die Sache, dass als Standardrichtlinie die Verzeichnisstruktur des Quellcodes aller Produkte in meinem Unternehmen genau gleich ist.

Ohne es zu merken, habe ich eine genau gleichnamige Datei geändert, in repo2der ich mich ändern sollte repo1. Also, ich habe einfach Befehl läuft git statusauf repo1und es hielt die gleiche Botschaft zu geben

Auf Zweigstamm

nichts zu begehen, Arbeitsverzeichnis sauber

für eine halbe Stunde. Dann beobachtete mein Kollege es als unabhängiges Augenpaar und machte mich darauf aufmerksam, dass ich mich in einem falschen, aber sehr ähnlich aussehenden Repository befand. In dem Moment, als ich zu repo1Git wechselte, bemerkte ich die geänderten Dateien.

Nicht so häufig. Aber du weißt nie!


2

Haben Sie das Verzeichnis unter Ihrer Shell entfernt? Dies kann passieren, wenn Sie Ihr Projekt aus einer Sicherung wiederhergestellt haben. Um dies zu beheben, einfach cdraus und wieder rein:

cd ../
cd -

Wow, das war der Fall. Verrückt. Ein weiterer Trick hat überhaupt nicht funktioniert!
Makalele

1

Überprüfen Sie bei diesem Problem im Allgemeinen zunächst, ob Sie die Datei bearbeiten, von der Sie glauben, dass Sie sie sind! Ich hatte dieses Problem, als ich eine transpilierte JavaScript-Datei anstelle der Quelldatei bearbeitete (die transpilierte Version war nicht unter Quellcodeverwaltung).


Danke, dass du das erwähnt hast! Ich war so überzeugt, dass ich die richtige Datei aktualisierte. Nee. Gesichtspalme
Ashley Grenon

1

Mein Git-Client (Gitg) hat dieses Problem für mich verursacht. Normale Befehle, die ich normalerweise ausführen würde, funktionierten nicht. Selbst das Berühren jeder Datei im Projekt hat nicht funktioniert.

Ich habe einen Weg gefunden, das Problem zu beheben, und bin mir immer noch nicht sicher, was es verursacht hat. Kopieren Sie Ihr Projektverzeichnis. Die fehlenden Dateien werden im kopierten Verzeichnis angezeigt git status. Das Umbenennen kann dasselbe bewirken.


1

Ich bin auf das Problem gestoßen, aber es waren nur zwei Verzeichnisse, und mir war nicht bekannt, dass beide Verzeichnisse als Git-Submodule konfiguriert wurden. Wie das passiert ist Ich habe keine Ahnung, aber der Prozess bestand darin, einige der Anweisungen auf diesem Link zu befolgen, aber NICHT das Verzeichnis zu entfernen (wie er es am Ende tut), sondern es zu tungit add path/to/dir


1

Wenn Sie eine Datei in Visual Studio bearbeiten, wird sie sofort in Git-Änderungen aufgelistet, auch wenn die Datei nicht gespeichert ist. Sie müssen die Datei also nur manuell speichern (Strg + S für die aktuell angezeigte Datei oder Strg + Umschalt + S für alle Projektdateien), und Git Bash nimmt sie auf.


Dies funktionierte bei mir, wenn ich einer .jsDatei Kommentare hinzufügte und mit Visual Studio Code arbeitete. Danke dir.
SnuKies

0

Welche Art von Datei haben Sie versucht hochzuladen? Jetzt verbringe ich nur fast eine Stunde damit, meine CSS-Modifikation hochzuladen. Aber diese CSS, die aus einer Styl-Datei kompiliert wurde, wurde von Git einfach ignoriert. Als ich die Stilquelle wechselte, funktionierte alles.

Ich hoffe es hilft.


0

Manchmal hängt es von der Git-Version ab und wenn Sie es vergessen git add ..

Um Ihre Änderungen im Repository zu überprüfen, verwenden Sie immer git statusalle nicht verfolgten und geänderten Dateien. Weil git diffnur hinzugefügte Dateien anzeigen.


0

Stellen Sie sicher, dass Sie keine symlinks ( ln -s source dest) innerhalb von Git Bash für Windows erstellen .

Es werden KEINE Symlinks erstellt, sondern eine DEEP-Kopie der Quelle zum Ziel

Ich habe das gleiche Verhalten wie OP auf einem MINGW64-Terminal von Git Bash für Windows (Version 2.16.2) festgestellt, um festzustellen, dass sich meine "bearbeiteten" Änderungen tatsächlich im ursprünglichen Verzeichnis befanden und meine Git-Bash-Befehle aus einer verbleibenden tiefen Kopie stammten unverändert.


0

Ich hatte das gleiche Problem. Es stellte sich heraus, dass ich zwei Kopien des Projekts hatte und mein Terminal sich im falschen Projektordner befand!


0

Es ist mir auch passiert, ich habe die oben genannten Methoden ausprobiert und nichts hat geholfen. Dann bestand die Lösung darin, die Datei über das Terminal und nicht über die GUI zu ändern. Ich weiß nicht, warum das funktioniert hat, aber es hat funktioniert. Nachdem ich die Datei über Nano vom Terminal Git bearbeitet hatte, erkannte ich sie als geändert und konnte sie hinzufügen und festschreiben.


Haben Sie eine Lösung dafür gefunden? Ich habe damit gekämpft, dass mein Git meine geänderten Dateien nicht erkennt, wenn ich ein Zusammenführungswerkzeug verwende. Die einzige Möglichkeit, Git dazu zu bringen, die Änderungen zu sehen, besteht darin, Nano für meine Zusammenführungen zu verwenden, was viel mehr Zeit in Anspruch nimmt. Die in Konflikt stehenden Dateien sind für Git zunächst sichtbar. Nachdem sie vom Zusammenführungswerkzeug bearbeitet wurden, werden sie in Git als "unverändert" angezeigt.
Lucas P.

Ich weiß nicht, warum das funktioniert und wie das funktioniert, aber es funktioniert für mich, danke
Amit Bisht

0

Ich habe das gleiche Problem hier VS2015 hat die Änderungen meiner JS-Dateien nicht erkannt. Das Entfernen von Fernbedienungen aus den Repository-Einstellungen und das erneute Hinzufügen des Remote-URL-Pfads haben mein Problem behoben.


0

Ich hatte ein ähnliches Problem, als ich eine Patch-Datei auf dem Server mit dem vi-Editor erstellte. Es scheint, dass das Problem mit dem Abstand war. Als ich den Patch von lokal gepusht habe, war die Bereitstellung korrekt.


-1

Ich hatte dieses Problem. Meins funktionierte nicht, weil ich meine Dateien im Ordner .git in meinem Projekt ablegte.


-1

In meinem Fall habe ich git reset --hardgelöschte Dateien erstellt und einige leere Ordner hinterlassen. Nachdem ich den Inhalt überprüft hatte, bemerkte ich, dass die Verzeichnisse leer waren.

Git ignoriert jedoch leere Ordner. (Korrektur, git ignoriert alle Verzeichnisse, da es Inhalte verfolgt, leere Ordner sind keine Inhalte.)


-5

versuche es git add * dann zu benutzengit commit


1
Willkommen bei SO! Dies beantwortet die Frage wahrscheinlich nicht und es gibt hier bereits 9 Antworten. Bitte wenden Sie sich Fragen zu, die beantwortet werden müssen!
Cris Luengo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.