2009-08-08 12 views
50

Ich versuche, meinen Repo von einem Remote-Zweig zu aktualisieren und bekomme diesen Fehler, wenn ich einen "Git-Pull" mache. Ich habe keine lokalen Änderungen vorgenommen, und selbst wenn ich sie habe, muss ich sie nicht behalten.Git ziehen: Fehler: Eintrag foo nicht update. Kann nicht verschmelzen

Ich habe versucht:

git reset --hard

und ich das gleiche Problem

Das einzige, was ist das Löschen der säumige Datei scheint zu funktionieren und versuchen Sie es erneut ein Git-Pull .

Ich habe auch versucht "Git Stash" gefolgt von einem "Git Pull". No Go.

bearbeiten: mit PortableGit-1.6.4-preview20090729 so alle vorherigen Bugs mit falschen Fehlern sollte behoben werden.

+0

Siehe, ob Erklärung in http://git.or.cz/gitwiki/GitFaq hilft. –

+0

Dito "* Das einzige, was zu funktionieren scheint, ist das Löschen der problematischen Datei und ein erneuter Git-Pull. *". Für mich war mindestens eine Datei nicht in Git; Es wurde von einer Platzhalterregel überprüft. Nicht sicher, warum sie Blocker waren. – ruffin

Antwort

15

Im Allgemeinen bedeutet dies, dass Sie Änderungen an Ihren lokalen Dateien haben, die nicht in Ihr lokales Repository übertragen wurden. Sie können diese stackoverflow question für ein bisschen mehr Details auch sehen.

+1

Von der Frage: _ "Ich habe keine lokalen Änderungen vorgenommen ..." _ –

1

einen Versuch wert:

Könnten Sie, nur für dieses Update, stellen Sie die config parameter core.trustctime auf false?

core.trustctime 

If false, the ctime differences between the index and the working copy are ignored; useful when the inode change time is regularly modified by something outside Git (file system crawlers and some backup systems).

+0

nice find, das funktionierte tatsächlich für mich, als ich die Fehlermeldung oben beim Ausführen von "git reset --merge" sah. Wenn ich diesen Parameter auf false gesetzt habe, wurde der Fehler behoben. – DemitryT

53

Es gibt ein paar Möglichkeiten, dies zu beheben, aber ich habe gute git stash funktioniert für mich gefunden. Es bringt 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ückbekommen.

Genau wie folgt aus:

$ git pull 
... 
... 
file your_file.rb not up to date, cannot merge. 

$ git stash 
$ git pull 
$ git stash pop 
+1

@yuit: Wenn dies für Sie gelöst wurde, sollten Sie diese Antwort akzeptieren – kynan

+9

Von der ursprünglichen Frage: _ "Ich habe auch versucht" Git Stash "gefolgt von einem" Git Pull ". Nein gehen." _ –

20

Diese Art von Problem, indem Sie versuchen von einem Repository zu ziehen, die zwei Dateinamen, die sich nur für den Fall, häufig verursacht. Wenn Sie auf FAT, NTFS in der Groß- und Kleinschreibung Modus (im Wesentlichen, wann immer es unter Windows verwendet wird), oder HFS + in Groß-und Kleinschreibung Modus, und zwei Dateien "Foobar" und "FOOBAR", dann wird Git zwei verschiedene sehen Dateien, aber das Dateisystem wird nur eins sehen, was alle Arten von Problemen verursachen wird. Git wird zur Kasse gehen, sagen wir "FOOBAR", und dann "foobar" auschecken, was das Dateisystem so sieht, dass es einfach den Inhalt von "FOOBAR" ersetzt, aber es an seinem Platz belässt. Nun zu Git, es scheint, dass "FOOBAR" durch den Inhalt von "Foobar" ersetzt wurde, und "Foobar" ist weg.

Es gibt zwei verschiedene Erscheinungsformen dieses Grundproblems. Eine ist, wenn Ihr Repository tatsächlich zwei Dateien enthält, die sich nur in der Groß-/Kleinschreibung unterscheiden. In diesem Fall müssen Sie an einem Dateisystem arbeiten, bei dem die Groß-/Kleinschreibung beachtet 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 auftritt, die den Fall der Datei ändert. Angenommen, das Git-Repository enthält eine Umbenennung von "BEISPIEL" in "Beispiel". Bevor Git die neue Version auscheckt, versucht es zu überprüfen, ob es eine vorhandene Datei, die Sie auf Ihrer Festplatte haben, überschreibt. Da es denkt, dass "example" ein neuer Dateiname ist, wird es das Dateisystem fragen, wenn es existiert, und das Dateisystem wird "EXAMPLE" sehen und ja sagen, also wird Git die neue Version ablehnen, da es denkt, dass es überschrieben wird nicht aufgezeichnete Dateien. In diesem Fall reicht eine einfache git reset --hard <revision-to-checkout> aus, wenn Sie keine lokalen Änderungen haben, die Ihnen wichtig sind, um Sie über das Problem und die neue Revision zu informieren.Denken Sie daran, Dateien nicht in andere Namen umzubenennen, die sich nur dann unterscheiden, wenn Sie ein Dateisystem verwenden, bei dem die Groß-/Kleinschreibung nicht berücksichtigt wird, da dies zu Problemen wie diesem führen kann.

5

Es könnte ein Problem auch mit Dateiberechtigungen sein. Git versioniert sie auch, es sei denn, die Konfiguration sagt etwas anderes. Fügen Sie einfach diese Antwort für Leute, die fast, aber nicht das gleiche Problem hat.

7

Für weitere ausführlich auf @Brian Campbell Post (weil Reset hart nicht funktioniert auch) Ich möchte einen Rand Fall, der mich aufgehalten wurde.

Ich hatte eine Datei OldFile in einen anderen Ordner verschoben und in NewFile umbenannt. Ich markierte dann die Datei als assume-unchanged.

Dies hinderte mich daran, die Filialen zu wechseln, und es gab keinen Vorrat, den ich retten oder einpacken könnte. Das Problem war, dass ich diese Dateiänderung nicht mit einem neuen Namen beging, bevor ich das Flag assume-unchanged setzte. Also habe ich es auf no-assume-unchanged zurückgesetzt, es festgeschrieben, dann wieder auf assume-unchanged gesetzt und ich konnte wieder die Zweige wechseln.

+0

Diese Antwort zu setzen Ich bin auf dem richtigen Weg, danke. Ich habe "git ls-files -v | grep '^ [[: lower:]]' | awk '{print $ 2}' | xargs git Aktualisierungsindex --no-assume-unmoded" verwendet, um das Flag "angenommen-unverändert" zurückzusetzen , dann konnte ich --hard ohne Fehler - zurücksetzen. – ocroquette

+0

Ich denke, das gilt auch für jede Datei mit der Bezeichnung "annehmen-unverändert". Ich hatte das gleiche Problem, wenn ich Änderungen an einer lokalen Datei ignorierte, die ihren ursprünglichen Namen hatte.Dein Kommentar hat mich daran erinnert, dass ich diese Datei markiert habe, danke! –

+2

Ich habe das gleiche Problem. Im Grunde genommen "unverändert annehmen" ist eine böse Eigenschaft. Sobald Sie es verwenden, macht es sehr schwierig, andere Zweige zu überprüfen. Selbst wenn Sie 'checkout -f' verwenden, wird es fehlschlagen. –

2

Ich sah ein ähnliches Problem (Windows 10): Ich war auf branchA und wollte zu master gehen. Ich hatte einige unbearbeitete Änderungen, so zuerst ich git stash dann git checkout -f master, aber ich habe immer noch die Entry 'fileName' not uptodate. Cannot merge.

git status zeigte nichts zu begehen.

Schließlich habe ich nur die Datei manuell entfernt und ich konnte in den anderen Zweig gehen (was natürlich meine Datei zurück kam), also denke ich, es gab irgendwo einen Fehler in Git.

+0

Dies ist die einzige Lösung für diese Frage, die für mich funktionierte. Ich habe den Fehler mit '.gitignore' Datei bekommen! Obwohl ich keine Änderungen daran vorgenommen hatte, und git würde es mir nicht erlauben, es zu "verstecken" (weil es keine lokalen Änderungen gibt, duh!). Also habe ich die '.gitignore'-Datei außerhalb des Repositories (als eine Art" Backup ") verschoben und dann ein' git reset --hard' gemacht, welches das Repository in einen vernünftigen Zustand "fixiert" hat. –

1

Dies kann passieren, wenn Sie den Index aktualisieren, bestimmte Dateien zu ignorieren:

git update-index --assume-unchanged <file> 

und dann für einige andere Zweig Instanz Kasse:

git checkout <branch> 
> error: Entry '<file>' not uptodate. Cannot merge. 

Index Refresh-Forcing behebt das Problem:

git update-index --really-refresh 
<file>: needs update 

Gefolgt von:

git reset --hard 

Und dann sollte alles wieder normal sein.

Verwandte Themen