Was bedeutet es, wenn Git sagt, dass eine Datei aktualisiert werden muss?

156

Ich kann für mein ganzes Leben keine anständige Erklärung für die Meldung "[Datei]: muss aktualisiert werden" finden, die Git manchmal von Zeit zu Zeit ausspuckt. Sogar die offiziellen Git-FAQ haben dies als TODO gekennzeichnet. Wenn jemand erklären könnte A) was es bedeutet; und B) wie man es repariert, wäre ich äußerst dankbar.

rofrankel
quelle
1
Gute Frage, wie Sie sagten, hat sogar der GitFaq keine Antwort: git.wiki.kernel.org/index.php/…
Justin Ethier
1
Können Sie genau sagen, welcher Befehl dies erzeugt? Und welche Version von Git? Ich habe versucht, sie von der Benutzeroberfläche zu entfernen, daher sollte Git Ihnen dies nur an Orten mitteilen, die ich vergessen habe ;-).
Matthieu Moy

Antworten:

108

Dies bedeutet, dass Sie versuchen, Änderungen von irgendwoher zusammenzuführen. Die Änderungen umfassen jedoch Änderungen an einer Datei, die fehlerhaft ist (derzeit in Ihrem Arbeitsbaum geändert). Sie müssen Ihre ausstehenden Änderungen festschreiben oder verstauen, ziehen / neu starten / zusammenführen / was auch immer Sie tun, um zu aktualisieren, und entstauen

Michael Mrozek
quelle
4
Es ist nicht wirklich der Pull - es ist die Zusammenführung, die Teil des Pull ist. Sie werden den gleichen Fehler sehen, wenn Sie versuchen, einen lokalen Zweig mit dem gleichen Problem zusammenzuführen, und ich denke, dass andere Zusammenführungsvorgänge (Anwenden, Verbergen anwenden ...) ähnliche Fehler drucken, wenn nicht der gleiche.
Cascabel
Ah danke. Das macht eigentlich Sinn. Ich denke, ich muss sicherstellen, dass ich Änderungen festschreibe, bevor ich einen anderen Zweig auschecke.
Rofrankel
7
Falls es den Suchergebnissen hilft, bin ich auch auf dieses Problem gestoßen, als ich versucht habe, eine git svn rebasemit einer schmutzigen Arbeitskopie zu erstellen. Stash Save, Rebase, Stash Pop und alles war in Ordnung mit der Welt.
Adam Tuttle
1
Die Datei selbst darf nicht geändert werden - selbst das Ändern von Dateiattributen (wie Berechtigungen) kann dies verursachen.
Chiborg
22

Wie andere bereits betont haben, bedeutet eine Aktualisierungsnachricht , dass die Datei verschmutzt oder mit anderen Worten veraltet ist. Aber anstatt zurückzusetzen und von vorne zu beginnen, können Sie einfach git statusund dann, git add <file> wenn es auf der geänderten Liste steht, etwas tun . Weil Sie die Datei schon vorher hinzufügen konnten, sie dann aber änderten. Das ist mir passiert und mit diesem einfachen habe addich das Problem gelöst.

Lomza
quelle
7

Melden Sie sich bei Ihrem Produktions- / Zielserver cdin dem Verzeichnis an, in dem sich Ihre Anwendung befindet, und führen Sie diese beiden Befehle aus.

1. Auf die neueste Version zurücksetzen

WARNUNG, dadurch werden alle Ihre Änderungen gelöscht:

git reset --hard HEAD

2. Ziehen Sie die Änderungen

git pull origin master

NXT
quelle
1
[git reset --hard HEAD] hat für mich gearbeitet. Ich hatte von einem Windows-Freigabe-Laufwerk festgeschrieben, aber mein Ubuntu-Verzeichnis spiegelte nicht das Festschreiben wider, das ich gerade vorgenommen hatte, obwohl es sich um denselben Ordner handelte (Z: Zuordnung zu / var / www / html /). Nachdem dies ausgeführt wurde, zeigen [git status] und [git pull] nun beide an, dass es aktuell ist.
Keith DC
Dies ist die Lösung, die auch für mich funktioniert hat. Ich habe versucht, den Git-Teilbaum mit SourceTree unter Windows zu verwenden, und es hat sich dabei stark verschlechtert.
Artem Russakovskii
3

Wie die Antwort auf die verknüpfte andere Frage besagt, bedeutet die Nachricht einfach, dass Sie noch ausstehende Änderungen haben. Sie erhalten dies auch, z. B. wenn Sie einige Änderungen vornehmen git add, dann ändern Sie Ihre Meinung und tun dies git reset HEAD filemit der Absicht, von vorne zu beginnen.

Tripleee
quelle
2
git reset HEAD filebewirkt, dass dieselbe Meldung
Experte
2

Dieser Fehler kann auftreten, wenn der Rebase-Prozess zusätzliche Änderungen an Dateien vornimmt , die sich nicht im Zielzweig befinden .

Für mich war der schwierige Teil mit .gitattributesDatei in meinem Repo. In einem anderen Zweig wurde ein neuer binärer Dateityp hinzugefügt, dessen Behandlung jedoch als Textdatei erzwungen wurde. Als die Datei von git aus dem Repo heruntergeladen wurde, wurden EOLs (eigentlich Binärwertbytes) ersetzt - was zu einer binären Differenz führte.

Das Hinzufügen eines neuen Eintrags, um den neuen Dateityp als binär zu behandeln, und das Wiederholen des gesamten Prozesses lösten das Problem für mich.

Proxy
quelle
1

In meinem Fall bekam ich immer

assets/ElipseThree.png: needs update
You must edit all merge conflicts and then
mark them as resolved using git add

Ich hatte diese Dateien in meinem Verzeichnis, aber sie wurden in meinem aktuellen Zweig umbenannt. Um das Problem zu beheben, rannte ich los

$ git mv assets/ElipseThree.png assets/elipseThree.png
$ git add assets/elipseHalfFull.png 
$ git rebase --continue

und es erlaubte mir weiterzumachen

ThinkDigital
quelle