Ich habe einige Updates auf meinem lokalen Computer vorgenommen, sie in ein Remote-Repository verschoben und jetzt versuche ich, die Änderungen auf den Server zu übertragen, und ich erhalte die Nachricht.
Fehler: Ihre lokalen Änderungen an den folgenden Dateien werden durch Zusammenführen überschrieben:
wp-content / w3tc-config / master.php
Bitte übernehmen Sie Ihre Änderungen oder speichern Sie sie, bevor Sie sie zusammenführen können.
Also rannte ich,
git checkout -- wp-content/w3tc-config/master.php
und versuchte es erneut und ich bekomme die gleiche Nachricht. Ich gehe davon aus, dass w3tc
sich etwas in der Konfigurationsdatei auf dem Server geändert hat. Es ist mir egal, ob die lokale Kopie oder die Remote-Kopie auf dem Server gespeichert wird (ich nehme an, die Remote-Kopie ist die beste), ich möchte nur den Rest meiner Änderungen (Plugin-Updates) zusammenführen können.
Irgendwelche Ideen?
Antworten:
Sie können nicht mit lokalen Änderungen zusammengeführt werden. Git schützt Sie vor dem Verlust potenziell wichtiger Änderungen.
Sie haben drei Möglichkeiten:
Übernehmen Sie die Änderung mit
Verstecke es.
Stashing fungiert als Stapel, in dem Sie Änderungen verschieben und in umgekehrter Reihenfolge einfügen können.
Geben Sie zum Verstecken Folgendes ein
Führen Sie die Zusammenführung durch und ziehen Sie dann das Versteck:
Verwerfen Sie die lokalen Änderungen
mit
git reset --hard
oder
git checkout -t -f remote/branch
Oder: Verwerfen Sie lokale Änderungen für eine bestimmte Datei
mit
git checkout filename
quelle
git reset --hard
, möchten Sie möglicherweise auch nicht verfolgte Dateien mitgit clean -dfx
git stash
werden keine Dateien gespeichert, für die es keinen Verlauf gibt. Wenn Sie also Dateien haben, die Sie noch nicht hinzugefügt haben, die aber durch die Zusammenführung überschrieben oder "erstellt" würden, wird die Zusammenführung weiterhin blockiert. In dieser Situation können Sie auchgit stash -u
nicht festgeschriebene Dateien speichern. Oder Sie können sie einfach löschen!git clean -dfx
war eine schreckliche Idee. Einige .gitignored-Dateien, die ich tatsächlich brauchte, wurden entfernt.git reset --hard
noch nicht zusammengeführte Änderungen hatte!Der erste Befehl speichert Ihre Änderungen vorübergehend im Stash und entfernt sie aus dem Arbeitsverzeichnis.
Der zweite Befehl wechselt die Zweige.
Der dritte Befehl stellt die Änderungen wieder her, die Sie im Stash gespeichert haben (die
--index
Option ist nützlich, um sicherzustellen, dass bereitgestellte Dateien noch bereitgestellt werden).quelle
git stash pop
anstelle von verwendengit stash apply
. Ersteres entfernt es aus dem Vorrat, während Letzteres es noch dort aufbewahrtSie können eine der folgenden Methoden ausprobieren:
Rebase
Versuchen Sie bei einfachen Änderungen, die Änderungen erneut vorzunehmen, während Sie die Änderungen vornehmen, z
Nach dem Abrufen wird Ihr aktueller Zweig über dem Upstream-Zweig angewendet.
Dies ist äquivalent zu:
checkout master
,fetch
undrebase origin/master
GIT - Befehle.Auschecken
Wenn Sie sich nicht um Ihre lokalen Änderungen kümmern, können Sie vorübergehend (mit Gewalt) zu einem anderen Zweig wechseln und ihn zurückschalten, z
zurücksetzen
Wenn Sie sich nicht um Ihre lokalen Änderungen kümmern, versuchen Sie, sie auf HEAD (Originalzustand) zurückzusetzen, z
Wenn das oben Gesagte nicht hilft, sind möglicherweise Regeln in Ihrer Git-Normalisierungsdatei (
.gitattributes
) enthalten. Es ist daher besser, die darin enthaltenen Informationen festzuschreiben. Oder Ihr Dateisystem unterstützt keine Berechtigungen, sodass Sie diesefilemode
in Ihrer Git-Konfiguration deaktivieren müssen .Verwandte: Wie erzwinge ich "git pull", um lokale Dateien zu überschreiben?
quelle
git status
welche Änderungen Sie nach dem Verstecken haben. Wenn keine Antwort hilft, sollten Sie eine neue Frage hinzufügen.Versuche dies
und versuchen Sie es erneut
quelle
git stash -u
, wie unter stackoverflow.com/questions/15745045/…Die Situation, in die ich geriet, war folgende:
außer, kurz davor war fern: also eigentlich das:
Was geschah, war (ich denke, nicht 100% positiv), dass der Git-Post-Empfangshaken aufgrund von Bewegungsänderungen im Remote-Server-Repository, die theoretisch nicht hätten berührt werden dürfen, anfing zu laufen und zu versagen.
Am Ende habe ich also den Post-Receive-Hook nachverfolgt und festgestellt, dass ich zum Remote-Repository auf dem Server gehen musste, und es gab die Änderung (die sich nicht in meinem lokalen Repository befand, was tatsächlich der Fall war) sagte, dass es übereinstimmte, keine Änderungen, nichts festzuschreiben, auf dem neuesten Stand usw.) Also, während es auf dem lokalen keine Änderungen gab, habe ich auf dem Server ein
git checkout -- some/file.ext
und dann die lokalen und entfernten Repositorys tatsächlich übereinstimmten und ich konnte weiter arbeiten und bereitstellen. Ich bin mir nicht ganz sicher, wie diese Situation aufgetreten ist, obwohl ein paar Dutzend Entwickler und IT-Änderungen möglicherweise etwas damit zu tun haben.quelle
WARNUNG: Dadurch werden nicht verfolgte Dateien gelöscht, daher ist dies keine gute Antwort auf diese Frage.
In meinem Fall wollte ich die Dateien nicht behalten, daher funktionierte dies für mich:
Git 2.11 und neuer:
Älterer Git:
Referenz: http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x bedeutet, dass ignorierte Dateien sowie Dateien, die git nicht kennen, ebenfalls entfernt werden.
-d bedeutet, dass nicht verfolgte Verzeichnisse zusätzlich zu nicht verfolgten Dateien entfernt werden.
-f ist erforderlich, um die Ausführung zu erzwingen.
quelle
So protokollieren Sie Ihre neu erstellten Dateien, während Sie dieses Problem beheben:
Wenn Sie neu erstellte Dateien haben , können Sie einen Patch mit lokalen Änderungen erstellen, Remote-Zusammenführungen abrufen und Ihren lokalen Patch anwenden, nachdem die Remote-Zusammenführung abgeschlossen ist, wie unten Schritt für Schritt definiert:
git add .
git diff --cached > mypatch.patch
git reset --hard
git pull
git apply mypatch.patch
Git führt Änderungen zusammen und erstellt .rej-Dateien für Änderungen, die nicht zusammengeführt werden.
Versuchen Sie, wie von Anu vorgeschlagen, wenn Sie Probleme beim Anwenden des Patches haben:
git apply --reject --whitespace=fix mypatch.patch
Diese Antwort git: patch wendet keine ausführlichen Gespräche zu diesem Problem anGenießen Sie Ihre fortgesetzte Arbeit an Ihrer Funktion und übernehmen Sie Ihre lokalen Änderungen, wenn Sie fertig sind.
quelle
error: patch failed: yourfile.py:33 error: yourfile.py: patch does not apply
verschoben. Patch zurück angewendet. -> Fehler: Ich habe immer noch mypatch.patch, weiß aber nicht, warum es nicht angewendet wird und ich habe meine Änderungen verloren !git apply --reject --whitespace=fix mypatch.patch
, ich habe meine Änderungen zurückbekommen, Puh !!! [Danke an] ( stackoverflow.com/a/15375869/6484358 )Vor dem Ziehen nach Commit fragen
Wenn benötigt :
quelle
Für mich hat nur
git reset --hard
funktioniert.Commit war keine Option, da es nichts zu Commit gab.
Verstecken war keine Option, weil es nichts zu verstauen gab.
Sieht so aus, als hätte es von ausgeschlossenen Dateien stammen können
.git/info/exclude
,git update-index --assume-unchanged <file>
die einige Dateien bearbeitet haben.quelle
In meinem Fall habe ich die Datei, über die Git sich beschwert hat, gesichert und dann gelöscht. Dann konnte ich endlich einen anderen Zweig auschecken.
Ich ersetzte dann die Datei, kopierte sie zurück in den Inhalt und fuhr fort, als ob nichts passiert wäre.
quelle
Dies wird wahrscheinlich durch CRLF-Probleme verursacht.
Siehe: Warum sollte ich core.autocrlf = true in Git verwenden?
Verwenden Sie diese Option, um die Aktualisierung abzurufen und zu erzwingen:
quelle
Ich habe die erste Antwort versucht:
git stash
mit der höchsten Punktzahl, aber die Fehlermeldung ist immer noch aufgetaucht, und dann habe ich diesen Artikel gefunden, um die Änderungen festzuschreiben , anstatt "Reluctant Commit" zu speichern.und die Fehlermeldung verschwand schließlich:
1:
git add .
2:
git commit -m "this is an additional commit"
3:
git checkout the-other-file-name
dann hat es geklappt. hoffe diese antwort hilft. :)
quelle
Wenn Sie Git Extensions verwenden , sollten Sie in der Lage sein, Ihre lokalen Änderungen
Working directory
wie folgt zu finden :Wenn Sie keine Änderungen sehen, liegt dies wahrscheinlich daran, dass Sie sich in einem falschen Untermodul befinden. Überprüfen Sie daher alle Elemente mit einem U-Boot-Symbol, wie unten gezeigt:
Wenn Sie eine nicht festgeschriebene Änderung gefunden haben:
Wählen Sie die Zeile mit aus
Working directory
, navigieren Sie zur Registerkarte Diff , klicken Sie mit der rechten Maustaste auf Zeilen mit einem Stiftsymbol (oder+
oder-
), wählen Sie Zurücksetzen, um zuerst festzuschreiben oder festzuschreiben oder zu speichern, oder was auch immer Sie damit tun möchten.quelle
Bei mir hat das geklappt:
git reset --hard
und dann
git pull origin <*current branch>
nachdem
git checkout <*branch>
quelle
Wahrscheinlich
würde helfen
quelle