Wie erhalte ich eine neue Kopie eines Zweigs aus dem Remote-Repository?

74

Die örtliche masterNiederlassung meines Freundes ist anscheinend eine Katastrophe (durch zufällige merges und commits, denke ich). Seine Entwicklungszweige sind jedoch in Ordnung, enthalten jedoch Änderungen, die er nicht auf die Fernbedienung übertragen kann.

Was ist der beste Weg, um seinen lokalen masterZweig mit dem Remote- masterZweig zu überschreiben und eine neue Kopie zu erhalten (ohne seine anderen Zweige zu überschreiben)?

Brian
quelle

Antworten:

120

Wie Jefromi kommentierte,

git checkout master
git reset --hard origin/master

macht das Richtige: den Master in seinen Ursprungsstatus versetzen. (Wenn Sie sich bereits in der masterVerzweigung befinden, können Sie den ersten Befehl weglassen.) Außerdem bleibt das Reflog der Verzweigung intakt.


Alte minderwertige Antwort:

git checkout dev
git branch -D master
git checkout master

Dadurch wird zu einem anderen Zweig gewechselt (in diesem Fall "dev" - wählen Sie einen anderen Zweig aus), der lokale masterZweig wird gelöscht und anschließend neu erstellt remotes/origin/master(was je nach Ihren Einstellungen und Ihrer Git-Version möglicherweise nicht funktioniert). Der letzte Befehl ist oft gleichbedeutend mit

git checkout -b master remotes/origin/master

Im Vergleich zu der obigen neuen Antwort hat dies den Nachteil, dass das Reflog zerstört und neu erstellt wird (dh Sie können dies bei Bedarf nicht so einfach rückgängig machen), und es ist weniger klar, was hier passiert. Außerdem muss ein anderer Zweig vorhanden sein, zu dem Sie beim Löschen und Wiederherstellen wechseln können (dies war jedoch in der ursprünglichen Frage der Fall).

Paŭlo Ebermann
quelle
6
Warum nicht einfach git reset --hard origin/master? Auch ... funktioniert dieser letzte Schritt überhaupt? Scheint mir nicht. ( git checkout -b master origin/masterwürde aber.)
Cascabel
@Jefromi: Du hast recht, ich habe die offensichtliche Lösung nicht gesehen. Das letzte scheint für mich zu funktionieren (das Auschecken hat einige Standardeinstellungen, wenn der Zweig nicht vorhanden ist, ein passender Remote-Zweig jedoch). Dies kann jedoch von der Version abhängen.
Paŭlo Ebermann
1
Ich habe die erste Lösung ausprobiert und es hat nicht funktioniert. Wäre schön, es heraus zu bearbeiten.
Lulalala
@lulalala Mit "erster" Lösung meinst du die als "alte" erwähnte? Damit es funktioniert, müssen Sie natürlich einen lokalen Zweig namens "dev" haben.
Paŭlo Ebermann
Ja, der checkout devEine
Lulalala