Ich versuche, mein Repo von einem Remote-Zweig aus zu aktualisieren und erhalte diesen Fehler immer wieder, wenn ich einen "Git Pull" mache. Ich habe keine lokalen Änderungen vorgenommen, und selbst wenn, muss ich sie nicht behalten.
Ich habe es versucht:
git reset --hard
und ich bekomme das gleiche Problem
Das einzige, was zu funktionieren scheint, ist, die fehlerhafte Datei zu löschen und erneut einen Git-Pull zu versuchen.
Ich habe auch versucht, git stash
gefolgt von einem git pull
. No Go.
Bearbeiten: Verwenden von PortableGit-1.6.4-Preview20090729, sodass alle vorherigen Fehler mit falschen Fehlern behoben werden sollten.
git rm --cached learned/tests/temp_funcs.py
Da ich sowieso wollte, dass die Datei in der Liste der nicht verfolgten Dateien verbleibt , wurdegit rm --cached
ich in diesem Fall entsperrt .--abort
. Keine der vorgeschlagenen Lösungen erlaubte mir den Abbruch, außer das Löschen der fehlerhaften Dateien.Antworten:
Es gibt verschiedene Möglichkeiten, dies zu beheben, aber ich habe festgestellt, dass Git Stash gut für mich funktioniert. Es versetzt Ihre lokalen Änderungen vorübergehend an einen anderen Ort. Dann können Sie ziehen, um die neuesten Änderungen zu erfassen. Und dann können Sie Ihre lokalen Änderungen zurückerhalten.
Genau wie dieser:
quelle
git rm --cached
, vollständiger Kommentar: stackoverflow.com/questions/1248029/…Dies kann passieren, wenn Sie den Index aktualisieren, um bestimmte Dateien zu ignorieren:
und dann zum Beispiel einen anderen Zweig auschecken:
Das Erzwingen einer Indexaktualisierung behebt das Problem:
Gefolgt von:
Und dann sollte alles wieder normal sein.
quelle
git rm --cached learned/tests/temp_funcs.py
Da ich sowieso wollte, dass die Datei in der Liste der nicht verfolgten Dateien verbleibt , wurdegit rm --cached
ich in diesem Fall entsperrt .git update-index --really-refresh
fehlte das Stück! Gut gemacht, das war schwer zu findenDiese Art von Problem wird häufig durch den Versuch verursacht, aus einem Repository mit zwei Dateinamen zu ziehen, die sich nur für den Fall unterscheiden. Wenn Sie FAT, NTFS im Modus ohne Berücksichtigung der Groß- und Kleinschreibung (im Wesentlichen jedes Mal, wenn es unter Windows verwendet wird) oder HFS + im Modus ohne Berücksichtigung der Groß- und Kleinschreibung verwenden und zwei Dateien "foobar" und "FOOBAR" haben, werden in Git zwei unterschiedliche Dateien angezeigt Dateien, aber das Dateisystem sieht nur eine, was alle Arten von Problemen verursacht. Git checkt beispielsweise "FOOBAR" und dann "foobar" aus, wobei das Dateisystem den Inhalt von "FOOBAR" einfach ersetzt, aber an Ort und Stelle belässt. Nun zu Git scheint es, dass "FOOBAR" durch den Inhalt von "foobar" ersetzt wurde und "foobar" weg ist.
Es gibt zwei verschiedene Erscheinungsformen dieses Grundproblems. Eine ist, wenn Ihr Repository tatsächlich zwei Dateien enthält, die sich nur in Groß- und Kleinschreibung unterscheiden. In diesem Fall müssen Sie an einem Dateisystem arbeiten, bei dem zwischen Groß- und Kleinschreibung unterschieden wird, oder Sie müssen das Repository bearbeiten, um sicherzustellen, dass keine Kollisionen dieser Art auftreten. Ein Dateisystem, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, kann den Inhalt dieses Repositorys einfach nicht speichern.
Ein anderer Fall, den Sie umgehen können, ist, wenn eine Umbenennung erfolgt, die den Fall der Datei ändert. Angenommen, das Git-Repository enthält eine Umbenennung von "BEISPIEL" in "Beispiel". Bevor Git die neue Version auscheckt, wird versucht, sicherzustellen, dass keine vorhandene Datei auf Ihrer Festplatte überschrieben wird. Da es glaubt, dass "Beispiel" ein neuer Dateiname ist, fragt es das Dateisystem, ob es existiert, und das Dateisystem sieht "BEISPIEL" und sagt "Ja", so dass Git sich weigert, die neue Version auszuchecken, da es denkt, dass sie überschrieben wird nicht verfolgte Dateien. In diesem Fall, wenn Sie keine lokalen Änderungen haben, die Sie interessieren, eine einfache
git reset --hard <revision-to-checkout>
Dies reicht im Allgemeinen aus, um das Problem zu überwinden und zur neuen Revision zu gelangen. Versuchen Sie einfach, Dateien nicht in andere Namen umzubenennen, die sich nur unterscheiden, wenn Sie sich in einem Dateisystem befinden, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, da dies zu solchen Problemen führen kann.quelle
Um den Beitrag von @Brian Campbell weiter zu erläutern (weil das Zurücksetzen auch nicht funktioniert hat), möchte ich auf einen Randfall hinweisen, der mich aufhielt.
Ich hatte eine Datei
OldFile
in einen anderen Ordner verschoben und umbenanntNewFile
. Ich habe dann die Datei als markiertassume-unchanged
.Dies hinderte mich daran, die Filialen zu wechseln, und es gab kein Versteck zum Speichern oder Festschreiben. Das Problem war, dass ich diese Dateiänderung nicht mit einem neuen Namen festgeschrieben habe, bevor ich das
assume-unchanged
Flag gesetzt habe. Also habe ich es zurückgesetztno-assume-unchanged
, festgeschrieben und dann wieder zurückgesetzt,assume-unchanged
und ich konnte die Zweige wieder wechseln.quelle
checkout -f
, wird es fehlschlagen.Im Allgemeinen bedeutet dies, dass Sie Änderungen an Ihren lokalen Dateien haben, die nicht in Ihr lokales Repository übernommen wurden. Sie können diese Stackoverflow-Frage auch etwas detaillierter sehen.
quelle
Ich sah ein ähnliches Problem (Windows 10): Ich war eingeschaltet
branchA
und wollte zu gehenmaster
. Ich hatte einige unverbindliche Änderungen, also zuerst ichgit stash
dann,git checkout -f master
aber ich bekam immer noch dieEntry 'fileName' not uptodate. Cannot merge
.git status
zeigte nichts zu begehen.Irgendwann habe ich die Datei einfach manuell entfernt und konnte zu dem anderen Zweig wechseln (was natürlich dazu führte, dass meine Datei zurückkam), also habe ich irgendwo einen Fehler in git gefunden.
quelle
.gitignore
Datei bekommen! Obwohl ich keine Änderungen daran vorgenommen hatte und Git es mir nicht erlaubte, es zu "verstauen" (weil es keine lokalen Änderungen gibt, duh!). Also habe ich die.gitignore
Datei aus dem Repository verschoben (als eine Art "Backup") und dann einegit reset --hard
, die das Repository in einen vernünftigen Zustand "reparierte".git status
zeigte mir, welche Datei geändert wurde und deutete an, dass ich sie verwenden könnte,git restore myFile
anstatt sie zu löschen, was funktionierte.Dies kann auch bei Dateiberechtigungen ein Problem sein. Git versioniert sie auch, sofern die Konfiguration nichts anderes sagt. Fügen Sie einfach diese Antwort für Leute hinzu, die fast, aber nicht das gleiche Problem haben.
quelle
Einen Versuch wert:
Könnten Sie nur für dieses Update den Konfigurationsparameter
core.trustctime
auf false setzen?quelle
Ich füge meine Antwort hinzu, weil keiner der anderen dies erwähnt. In meinem Fall geschah dies, nachdem ich dem Index neue Dateien mit dem
-N
Flag hinzugefügt hatte , also fügte ich sie einfach dem Index hinzu, ohne ihren Inhalt hinzuzufügen. In diesem Zustand führt dies zugit stash
diesem Fehler.quelle
Ich hatte den gleichen Fehler nach einer Situation, in der für eine Datei
git status
gesagt wurde, die nicht zum Staging-Bereich hinzugefügt wurde. dh unter der Überschrift "Änderungen nicht für Commit bereitgestellt". Sehr seltsam, das passiert normalerweise nicht.new file: foo.cpp
Lösung:
git add foo.cpp
und danngit stash
wieder funktioniert.quelle