2013-01-10 6 views
30

Ich arbeite an einem Git-Repository von mir selbst (also ja, ich kenne die Implikationen und die Warnungen, dies zu tun) und irgendwie einer der Bäume bekam ein Commit nach dem geschoben wann es sollte nicht haben.Konflikte lösen: Alle Dateien überschreiben

Jetzt versuche ich zurückzuziehen und es beschwert sich über Hunderte von Merge-Konflikten.

Gibt es eine Möglichkeit, git mit Nachdruck zu melden überschreiben Sie alle lokalen Dateien, die vom Remote-Server kommen? Gibt es einen schnelleren Weg als git reset --hard HEAD~1 zu tun und dann den Zug zu machen?

Gibt es eine Möglichkeit, dasselbe mit einer einfachen Zusammenführung zu tun? Alles, was ich gesehen habe, schlägt vor, jede einzelne Datei während der Konfliktlösungsstufe zu überprüfen, aber mit Hunderten von Dateien ist es einfach nicht möglich, dies manuell zu tun.

+1

Warum blasen Sie nicht einfach Ihre Sandbox weg und git es wieder klonen? – gview

+0

Ich hoffte auf etwas, das nicht so viel Zeit in Anspruch nahm. Das Projekt ist groß und würde viel Zeit brauchen, um zu klonen. – Qix

Antwort

53

Es gibt drei einfache Lösungen, um die letzte Version zu kopieren, die in Ihnen Remote-Repository ist, alle Änderungen zu verwerfen, die Sie vor Ort gemacht haben:

  1. Repository verwerfen und klonen wieder. Dies ist die einfachste Lösung, aber wenn Ihr Repository groß ist, kann es sehr lange dauern, und zusätzlichen Aufwand configure ing wie neu usw.

  2. Discard die lokalen Änderungen mit git reset --hard <hash> und dann ein git pull erfordern. Das Problem besteht darin, dass Sie zuerst einen Commit finden müssen, der dem Änderungsverlauf vorangeht, den Sie vermeiden möchten. Nachdem Sie auf diesen Commit-Hash zurückgesetzt haben, tun Sie eine git pull.

  3. ein git fetch Sie das Updates auf Ihre lokale Referenz des Fern Zweig (in der Regel Herkunft/Master) und dann ein git reset --hard tun bringen diese Referenz vorbei, das heißt git reset --hard origin/master.

+4

# 3 war ziemlich schlau. Gute Antwort. Willkommen bei StackOverflow, nebenbei. Nur eine Anmerkung: Verwenden Sie "back-quotes" ('), um Code oder Befehlszeilenmaterial anzugeben. – Qix

+3

'git checkout --theirs.' scheint zu funktionieren, wenn die Zusammenführung keine Löschungen enthält –

0
git reset --hard {remote_repository_name}/{branch_name} 

Beispiel:

git reset --hard upstream/branch1 

Wenn Sie mit einem Zweig arbeiten, können Sie die oben code.But davor verwenden, können Sie (vor- oder Herkunft) zu Ihrem lokalen Repository gesetzt haben ,

git remote add upstream https://github.com/lakini/example.git 

hier ist https://github.com/lakini/example.git die Remote-Upstream-Repository.

Gleich wie dies können wir auch im Remote-Repository (Ursprung) arbeiten.

git reset --hard origin/branch1 
+0

Das ist ziemlich genau das, was die andere Antwort sagte ... – Qix