git verwerfe alle Änderungen und ziehe von stromaufwärts


144

Wie hole ich ein Upstream-Repo und lasse es den Master ersetzen? Ich habe nur einen Zweig in meinem Repo, nämlich Master, und ich habe ihn komplett durcheinander gebracht, daher muss ich grundsätzlich von oben beginnen. Ich denke, init wird den Job machen, aber gibt es einen einfacheren Weg?

Antworten:


250

Hier können Sie (mindestens) zwei Dinge tun: Sie können das Remote-Repo neu klonen oder Sie können reset --hard zum gemeinsamen Vorfahren und dann einen Pull , der schnell zum neuesten Commit auf dem Remote-Master .

Um konkret zu sein, hier eine einfache Erweiterung von Nevik Rehnels ursprünglicher Antwort:

git reset --hard origin/master
git pull origin master

HINWEIS : Mit using git reset --hardwerden alle nicht festgeschriebenen Änderungen verworfen, und es kann leicht sein, sich mit diesem Befehl zu verwechseln, wenn Sie neu in git sind. Vergewissern Sie sich daher, dass Sie wissen, was zu tun ist, bevor Sie fortfahren.


1
Mehr Hilfe für die Neulinge da draußen: git gcräumt auf und läuft durch die Hauswirtschaft. In einem anderen Punkt bin ich nie gelaufen git gc. Es ist schön zu laufen, wird aber nicht benötigt.
Joshua Dance

@ JoshuaDance - guter Punkt. Ich bin mir nicht sicher, warum ich es ursprünglich aufgenommen habe.
Eric Walker

23

während auf Zweigstelle Master: git reset --hard origin/master

dann mach ein paar Aufräumarbeiten mit git gc(mehr dazu in den Manpages)

Update: Sie müssen wahrscheinlich auch eine ausführen git fetch origin(oder git fetch origin masterwenn Sie nur diesen Zweig möchten); Es sollte keine Rolle spielen, ob Sie dies vor oder nach dem Zurücksetzen tun. (Danke @ eric-walker)


1
Möglicherweise müssen Sie nach dem ziehen reset --hard.
Eric Walker

Das Ziehen vom Master ist nicht erforderlich, sobald der Git-Abrufursprung vor dem Zurücksetzen ausgeführt wurde.
Sciritai

@sciritai: Mein Kommentar wurde hinzugefügt, bevor das Abrufen vom Ursprung erwähnt wurde.
Eric Walker

19

Sie können dies mit einem einzigen Befehl tun:

git fetch --all && git reset --hard origin/master

Oder in zwei Befehlen:

git fetch --all
git reset --hard origin/master

Beachten Sie, dass Sie ALLE Ihre lokalen Änderungen verlieren werden


5
git reset <hash>  # you need to know the last good hash, so you can remove all your local commits

git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f

voila, jetzt ist deine Gabel wieder so wie stromaufwärts.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.