So bereinigen / kopieren Sie einen Remote-Git-Zweig sauber in das lokale Repository

75

Ich möchte eine exakte "Kopie" eines Remote-Zweigs, der in einen bestimmten lokalen Zweig "kopiert" wurde.

Angenommen, ein Teammitglied hat eine experimentelle Funktion erstellt, die es in einen Zweig eingecheckt hat, experimentder im Remote-Repository aufgerufen wird . Ich möchte in der Lage sein, einen neuen Zweig in meinem lokalen Repository auszuchecken und den experimentZweig unverändert in meinen neu ausgecheckten Zweig zu "kopieren" .

Ich möchte es nicht mit meinem Code zusammenführen - ich möchte meinen Code vollständig überschreiben, damit ich einen sauberen Blick darauf werfen kann, was er im Zweig "Experiment" getan hat.

Wie würde man einen Remote-Zweig "holen" (holen / ziehen / was auch immer ...), den jemand anderes für das Remote-Repository in Ihr eigenes lokales Repository übernommen hat, auf eine Weise, die nicht versucht, eine Zusammenführung Ihres eigenen lokalen Codes durchzuführen ?

Stanley
quelle
In solchen Fällen möchte ich eine separate Kopie meines lokalen Repos aufbewahren. Das erspart Ihnen nicht nur Fehler, sondern ermöglicht mir auch, parallel zu arbeiten.
user1164937

Antworten:

135

Wenn Sie sich nicht für das Zusammenführen interessieren:

git reset --hard <remote>/<branch_name>

Dies wird genau das tun, was Sie wollen: kein Zusammenführen, kein erneutes Basieren. Versetzen Sie den lokalen Zweig einfach in genau den gleichen Zustand wie die Fernbedienung.

In Ihrem Fall brauchen Sie das jedoch nicht. Sie möchten einen neuen lokalen Zweig erstellen , der denselben Status wie der Remote-Zweig hat. Geben Sie daher den Remote-Zweig an, wenn Sie den lokalen Zweig erstellen mit git checkout:

git checkout -b <my_new_branch> <remote>/<branch_name>

Wenn Sie lokal denselben Namen verwenden möchten, können Sie diesen verkürzen auf:

git checkout <branch_name>

Sie würden verwenden , git reset --hardwenn Sie bereits eine lokale Niederlassung (zum Beispiel mit einigen Änderungen in it) haben, verwerfen alle Änderungen , dass Sie gemacht und stattdessen die genaue Version des Remote - Zweiges nehmen.

Um sicherzustellen, dass Sie den neuesten Status der Remote-Verzweigung haben, verwenden Sie diese Option, git fetch <remote>bevor Sie sie auschecken oder zurücksetzen.

eckes
quelle
8
Nicht zurücksetzen, um Ihre Änderungen wegzuwerfen. Verstecken Sie stattdessen Git. Viel sicherer.
Adam Dymitruk
2
Das hat zunächst nicht funktioniert, aber das liegt daran, dass ich nicht mit dem Abrufen der Fernbedienung begonnen habe.
Capybaralet
Ich verstehe diese Antwort nicht. Geben Sie "remote / <branch_name>" oder "<remote> / <branch_name>" ein und ersetzen Sie "origin" oder etwas anderes für <remote>?
Ray
@ Robert <remote> / <branch_name>
eckes
Ich habe git checkout -b Zweigname Ursprung / Zweigname, aber ich bekomme Warnung: Refname ist mehrdeutig
Alexander
2

Ich habe nicht genug Repräsentanten, um Kommentare abzugeben, aber ich möchte ein Beispiel für diejenigen hinzufügen, die immer noch Probleme haben. In meinem Beispiel verwende ich Github als Remote und kopiere den Zweig in meine Linux-Serverumgebung / mein Linux-Terminal.

Zunächst möchten Sie ausführen, git fetchum sicherzustellen, dass Sie auf dem neuesten Stand sind.

Am Beispiel von

git checkout -b <my_new_branch> <remote>/<branch_name>

Mit einem entfernten Zweig namens "picklerick"

Ich rannte

git checkout -b picklerick remotes/origin/picklerick

Ich hätte wahrscheinlich nur remote/picklerickmeinen Remote-Pfad verwenden können, aber das hat bei mir funktioniert.

Paulvantuyl
quelle