Nahezu jede Kombination, Stashing von Änderungen und Abrufen aus dem Repository, führt zu nicht zusammenführbaren Dateien. Ich möchte alle lokalen Änderungen verwerfen und nur die Fernbedienung verwenden, aber ich kann nicht erneut klonen (Bandbreiten- und Internetnutzungsbeschränkungen, wenn der Entwickler dies versucht). Wie mache ich das?
Gerade versucht:
git stash
git pull
Hat auch nicht funktioniert.
Mehr Info
Es gibt einen lokalen Commit, und der Upstream hat ebenfalls einen Commit. Ich habe es also versucht git pull --rebase aber es funktioniert immer noch nicht richtig … Das gibt mir Fehler – “Beenden wegen eines ungelösten Konflikts”. Wenn ich mache git stash, git reset --hard HEAD, git pull --rebaseerhalte ich die Fehlermeldung “Pull ist nicht möglich, nicht zusammengeführte Änderungen …”
Trevor Norris
Sagen Sie, die Fernbedienung ist origin und der Zweig ist masterund sagen Sie, Sie haben bereits master ausgecheckt, könnte folgendes versuchen:
git fetch origin
git reset --hard origin/master
Dies nimmt im Grunde nur den aktuellen Zweig und zeigt ihn auf die HEAD der entfernten Filiale.
WARNUNG: Wie in den Kommentaren angegeben, Dadurch werden Ihre lokalen Änderungen verworfen und mit dem überschreiben, was auf dem Ursprung steht.
Oder Sie können die Installationsbefehle verwenden, um im Wesentlichen dasselbe zu tun:
EDIT: Ich möchte kurz erklären, warum das funktioniert.
Der .git Ordner kann die Commits für eine beliebige Anzahl von Repositories enthalten. Da der Commit-Hash eigentlich eine Überprüfungsmethode für den Inhalt des Commit ist und nicht nur ein zufällig generierter Wert, wird er verwendet, um Commit-Sets zwischen Repositories abzugleichen.
Ein Zweig ist nur ein benannter Zeiger auf einen bestimmten Hash. Hier ist ein Beispielsatz:
$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
Jede dieser Dateien enthält einen Hash, der auf einen Commit zeigt:
Diese sind alle für den internen Git-Speichermechanismus und arbeiten unabhängig von der Arbeitsverzeichnis. Indem Sie Folgendes tun:
git reset --hard origin/master
git zeigt den aktuellen Zweig auf denselben Hashwert, auf den origin/master zeigt. Dann ändert es zwangsweise das Arbeitsverzeichnis, damit es mit der Dateistruktur/dem Inhalt bei diesem Hash übereinstimmt.
Um dies bei der Arbeit zu sehen, probieren Sie Folgendes aus:
git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD
Von der kürzlich genehmigten Bearbeitung, die die massive Warnung am Anfang hinzufügt, möchte ich nur darauf hinweisen, dass sie bereits erwähnt wird: „Dann [git] ändert das Arbeitsverzeichnis zwangsweise, damit es mit der Dateistruktur/dem Inhalt bei diesem Hash übereinstimmt.” Aber schätze, das war nicht explizit genug.
Der Trick besteht darin, die Änderungen zu rebasen … Wir hatten einige Probleme beim Rebasen eines trivialen Commits, und deshalb haben wir es einfach mit git rebase –skip übersprungen (nachdem wir die Dateien kopiert hatten).
Wenn dieses Problem jemals auftritt, nachdem Sie a git fetch und dann erlaubt dir git nicht zu laufen git pull wegen eines Zusammenführungskonflikts (sowohl modifizierte als auch nicht zusammengeführte Dateien, und um Sie noch frustrierter zu machen, werden Ihnen keine Konfliktmarkierungen in der Datei angezeigt, da sie noch nicht zusammengeführt wurde). Wenn Sie Ihre Arbeit nicht verlieren möchten, können Sie Folgendes tun.
Stage die Datei.
$ git add filename
verstauen Sie dann die lokalen Änderungen.
$ git stash
Ziehen und aktualisieren Sie Ihr Arbeitsverzeichnis
$ git pull
Stellen Sie Ihre lokale geänderte Datei wieder her (git wird automatisch zusammengeführt, wenn dies möglich ist, andernfalls lösen Sie es auf)
$ git stash pop
Hoffe es wird helfen.
Preeti A.
Es gibt eine Lösung, auch wenn Sie Ihre lokalen Änderungen nicht entfernen möchten. Reparieren Sie einfach die nicht zusammengeführten Dateien (by git add oder git remove). Dann mach git pull.
Ryan Steward
Angenommen, Sie möchten alle vorgenommenen Änderungen verwerfen, überprüfen Sie zuerst die Ausgabe von git status. Führen Sie für jede Datei mit der Aufschrift “unmerged” daneben aus git add <unmerged file>. Dann weiter mit git reset --hard. Dadurch werden alle lokalen Änderungen mit Ausnahme von nicht verfolgten Dateien entfernt.
Ich wurde mit git gelöst, um die nicht zusammengeführte Datei lokal zu entfernen.