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?

NinjaCowgirl
quelle

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.

Eric Walker
quelle
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)

Nevik Rehnel
quelle
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

Luca C.
quelle
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.

Ergebnisweg
quelle