it-swarm.com.de

Wie löse ich git mit dem Hinweis "Übernehmen Sie Ihre Änderungen oder verwahren Sie sie, bevor Sie zusammenführen können"?

Ich habe einige Aktualisierungen auf meinem lokalen Computer vorgenommen, sie in ein Remote-Repository verschoben und jetzt versuche ich, die Änderungen auf den Server zu ziehen, und ich erhalte die Nachricht.

fehler: Ihre lokalen Änderungen an den folgenden Dateien werden beim Zusammenführen überschrieben:

wp-content/w3tc-config/master.php

Bitte machen Sie Ihre Änderungen fest oder bewahren Sie sie auf, bevor Sie sie zusammenführen können.

Also bin ich gerannt,

git checkout -- wp-content/w3tc-config/master.php

und versuchte es erneut und ich bekomme die gleiche Nachricht. Ich gehe davon aus, dass w3tc 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 abgelegt wird (ich nehme an, die entfernte Kopie ist am besten), ich möchte nur die restlichen Änderungen zusammenführen (Plugin-Updates).

Irgendwelche Ideen?

576
Jo Sprague

Sie können nicht mit lokalen Änderungen zusammengeführt werden. Git schützt Sie davor, möglicherweise wichtige Änderungen zu verlieren.

Sie haben drei Möglichkeiten: 

  • Bestätigen Sie die Änderung mit

    git commit -m "My message"
    
  • Versteck es.

    Stashing fungiert als Stapel, in dem Sie Änderungen verschieben und in umgekehrter Reihenfolge verschieben können.

    Geben Sie zum Ablegen ein

    git stash
    

    Führe die Zusammenführung aus und ziehe dann den Vorrat:

    git stash pop
    
  • Verwerfen Sie die lokalen Änderungen

    git reset --hard verwenden
    oder git checkout -t -f remote/branch

    Oder: Lokale Änderungen für eine bestimmte Datei verwerfen

    git checkout filename verwenden

1029
stdcall
git stash
git pull <remote name> <remote branch name> (or) switch branch
git stash apply --index

Der erste Befehl speichert Ihre Änderungen vorübergehend in the stash und entfernt sie aus dem Arbeitsverzeichnis.

Der zweite Befehl wechselt die Verzweigungen.

Der dritte Befehl stellt die Änderungen wieder her, die Sie im Stash gespeichert haben (die Option --index ist hilfreich, um sicherzustellen, dass die bereitgestellten Dateien weiterhin bereitgestellt werden).

55
Loganathan

Sie können eine der folgenden Methoden ausprobieren:

rebase

Versuchen Sie für einfache Änderungen, die Änderungen zu ändern, z.

git pull Origin master -r

So wird der aktuelle Zweig nach dem Abrufen oben auf den Upstream-Zweig angewendet.

Dies ist äquivalent zu: checkout master, fetch und rebase Origin/master git-Befehlen.

Dies ist eine potenziell gefährliche Betriebsart. Es schreibt die Historie neu, was nicht gut ist, wenn Sie diese Historie bereits veröffentlicht haben. Verwenden Sie diese Option nicht, wenn Sie git-rebase(1) sorgfältig gelesen haben.


auschecken

Wenn Sie sich nicht für Ihre lokalen Änderungen interessieren, können Sie zu einem anderen Zweig wechseln (mit Erzwingung) und ihn zurückschalten, z.

git checkout Origin/master -f
git checkout master -f

zurücksetzen

Wenn Sie sich nicht für Ihre lokalen Änderungen interessieren, versuchen Sie, sie auf HEAD (Ausgangszustand) zurückzusetzen, z.

git reset HEAD --hard

Wenn oben nichts hilft, sind es möglicherweise Regeln in Ihrer git-Normalisierungsdatei (.gitattributes). Es ist daher besser, das festzuschreiben, was darin steht. Oder Ihr Dateisystem unterstützt keine Berechtigungen, daher müssen Sie filemode in Ihrer git config deaktivieren.

Related: Wie erzwinge ich "git pull", um lokale Dateien zu überschreiben?

20
kenorb

Die Situation, auf die ich gestoßen bin, war folgende:

fehler: Ihre lokalen Änderungen an den folgenden Dateien werden durch die Zusammenführung überschrieben: wp-content/w3tc-config/master.php Bitte machen Sie Ihre Änderungen fest oder bewahren Sie sie auf, bevor Sie sie zusammenführen können.

außer, direkt davor, war Remote: also eigentlich dies:

remote: Fehler: Ihre lokalen Änderungen an den folgenden Dateien werden durch die Zusammenführung überschrieben: einige/file.ext Bitte machen Sie Ihre Änderungen fest oder bewahren Sie sie auf, bevor Sie sie zusammenführen können.

Was geschah, war (ich denke, nicht zu 100% positiv), dass der Git-Post-Empfangshaken aufgrund von Bewegungsänderungen im Remote-Server-Repository anfing zu laufen und zu vermasseln war, was theoretisch nicht berührt werden sollte.

Was ich also tat, indem ich durch den Post-Receive-Hook nachverfolgte und dies herausfand, war das entfernte Repository auf dem Server, und es gab die Änderung (die sich nicht in meinem lokalen Repository befand. sagte, dass es übereinstimmte, keine Änderungen, nichts zu verpflichten, auf dem neuesten Stand usw.) Während auf dem lokalen Server keine Änderungen vorgenommen wurden, habe ich auf dem Server einen git checkout -- some/file.ext vorgenommen und dann die lokalen und fernen Repositorys tatsächlich angepasst und ich könnte weiter arbeiten und bereitstellen. Nicht ganz sicher, wie diese Situation auftrat, obwohl ein paar Dutzend Entwickler und IT-Änderungen möglicherweise etwas damit zu tun hatten.

10
Mike

Versuche dies 

git stash save ""

und noch einmal ziehen

6
Mr Nobody

WARNUNG: Dies löscht nicht aufgespürte Dateien und ist daher keine gute Antwort auf diese Frage.

In meinem Fall wollte ich die Akten nicht aufbewahren, also funktionierte das für mich:

Git 2.11 und neuer:

git clean  -d  -fx .

Älteres Git:

git clean  -d  -fx ""

Reference:http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

  • -x bedeutet, dass ignorierte Dateien ebenso entfernt werden wie Dateien, die git nicht kennt.

  • -d bedeutet, dass nicht verfolgte Verzeichnisse entfernt werden.

  • -f ist erforderlich, um die Ausführung zu erzwingen.

2
Dark Matter

Vor dem Zug nach Commit fragen

  • git stash
  • git pull Origin << branchname >>

Wenn benötigt :

  • git stash anwenden
2
Rahul Mankar

Ich habe die erste Antwort ausprobiert: git stash mit der höchsten Punktzahl, aber die Fehlermeldung wurde immer noch angezeigt. Dann fand ich diesen Artikel, um die Änderungen anstelle von Stash zu übernehmen 'Reluctant Commit'

und die Fehlermeldung verschwand endlich:

1: git add . 

2: git commit -m "this is an additional commit"

3: git checkout the-other-file-name

dann hat es funktioniert. Ich hoffe, diese Antwort hilft. :)

0
hong cai

Dies wird wahrscheinlich durch CRLF-Probleme verursacht.

Siehe: Warum sollte ich in Git core.autocrlf = true verwenden?

Verwenden Sie diese Option, um das Update abzurufen und zu erzwingen:

git pull Origin master
git checkout Origin/master -f
0
Keith Turkowski

In meinem Fall habe ich die Datei gesichert und dann gelöscht, über die Git sich beschwert, begangen, dann konnte ich endlich einen anderen Zweig auschecken.

Ich ersetzte die Datei, kopierte den Inhalt zurück und fuhr fort, als ob nichts passiert wäre.

0
CodyBugstein

Wenn Sie Git Extensions verwenden, sollten Sie in der Lage sein, Ihre lokalen Änderungen im Working directory wie gezeigt zu finden unten:

enter image description here

Wenn Sie keine Änderungen sehen, liegt dies wahrscheinlich daran, dass Sie sich in einem falschen Submodul befinden. So überprüfen Sie alle Elemente mit einem U-Boot-Symbol wie unten gezeigt:

enter image description here

Wenn Sie eine nicht festgeschriebene Änderung gefunden haben:

Wählen Sie die Zeile mit Working directory aus, navigieren Sie zur Registerkarte Diff , und klicken Sie mit der rechten Maustaste auf die Zeilen + oder -), wählen Sie Zurücksetzen, um das erste Commit oder Commit oder Stash auszuführen, oder was auch immer Sie möchten mach damit.

0
Bizhan

Bei mir hat nur git reset --hard funktioniert.

Festschreiben war keine Option, da nichts festzuschreiben war.

Verstauen war keine Option, da es nichts zu verstauen gab.

Sieht so aus, als ob es aus ausgeschlossenen Dateien in .git/info/exclude stammen könnte und git update-index --assume-unchanged <file> einige Dateien bearbeitet hat.

0
Leo

Bei mir funktioniert diese Methode am besten, anstatt sie zu verstauen. Ich möchte die neuesten Änderungen einbringen, eine Kopie meiner lokalen Änderungen aufbewahren und diese anschließend anwenden.

  1. Stellen Sie Ihre lokalen Änderungen in Szene. (nicht festschreiben) (Staging erforderlich, um auch neue nicht nachverfolgte Dateien zu patchen)

git add .

  1. Erstellen Sie einen Patch, um Aufzeichnungen zu führen

git diff --cached > mypatch.patch

  1. Verwerfen Sie lokale Änderungen und löschen Sie neue lokale Dateien

git reset --hard

  1. Änderungen ziehen

git pull

  1. Wenden Sie Ihren Patch an

git apply mypatch.patch

Git führt Änderungen zusammen und erstellt .rej-Dateien für Änderungen, die nicht zusammengeführt werden.

Und genießen Sie Ihre fortgesetzte Arbeit an Ihrem Feature und übernehmen Sie Ihre lokalen Änderungen, wenn Sie fertig sind.

0
Manpreet