Wie setze ich 'master' auf 'origin / master' zurück?


215

Kann ich auf einfachere Weise Folgendes tun?

git checkout origin/master
git branch -D master
git branch master
git checkout master

Manchmal kann dies geschehen, ohne den Arbeitsbaum zu berühren: stackoverflow.com/a/12343727/586086
Andrew Mao

6
Bitte aktualisieren Sie Ihre akzeptierte Antwort: @ KindDragons Antwort ist korrekter und kürzer.
Robert Siemer

Antworten:


310

Wie in der Antwort von KindDragon erwähnt, können Sie masterdirekt bei Folgendes neu erstellen origin/master:

git checkout -B master origin/master

Die git checkoutManpage erwähnt:

Wenn -Bangegeben, <new_branch>wird erstellt, wenn es nicht vorhanden ist. Andernfalls wird es zurückgesetzt . Dies ist das Transaktionsäquivalent von

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

Ursprünglich vorgeschlagen:

So etwas wie:

$ git checkout master

# remember where the master was referencing to
$ git branch previous_master

# Reset master back to origin/master
$ git reset --hard origin/master

wobei Schritt 2 optional ist.


1
Sie können das mit einer Zeile tun.
Robert Siemer

93

Git unterstützt diesen Befehl:

git checkout -B master origin/master

Überprüfen Sie den origin/masterZweig und setzen Sie ihn masterdort zurück.


4
Die einzig wahre Antwort.
Robert Siemer

3
Speichern Sie vier Tastatureingaben - Sie brauchen keine Anführungszeichen. Einfach: git Checkout -B Master Origin / Master
Zumalifeguard

Nehmen wir an, ich habe zwei Dinge festgeschrieben, das erste ist eine Verschmelzung mit einem Zweig und das zweite ist regulär. Was passiert mit der Zusammenführung, wenn ich zum Ursprung / Master zurückkehre?
utdev

1
Musst du nicht git fetch origin mastervorher sicher sein, dass origin/masteres aktualisiert wird?
pedrozath

Ja, natürlich mit allen Lösungen, die Sie git fetchzuerst tun sollten
KindDragon

29

Ich denke, selbst die Antwort von VonC ist im Vergleich zu dieser Option komplex:

git update-ref refs/heads/master origin/master
git reset --hard master

git protokolliert automatisch jeden Wert eines Verweises (durch das Reflog). Nachdem Sie diesen Befehl ausgeführt haben, wird master@{1}auf den vorherigen Wert von master verwiesen.

VonCs Antwort ist richtig, aber es verschwendet Zeit, den alten Wert von master in das Dateisystem auszulesen.

Wenn Sie sich für verwaiste Objekte im Repo interessieren, können Sie ausführen git gc


1
Klingt nach einer interessanten Alternative. +1
VomC

Ich bekomme immer nochAlready on 'master'
yourfriendzak

@yourfriendzak, ich habe vergessen zu berücksichtigen, dass Sie möglicherweise den Master bereits ausgecheckt haben, bevor Sie den Master aktualisieren. Ich habe die Antwort so aktualisiert, dass sie auch in diesem Fall funktionieren sollte.
Alexander Bird

Dies funktioniert auch dann, wenn Sie nicht als Master angemeldet sind (wie ein abgelöster HEAD-Status, der tatsächlich auf den Spitzenursprung / Master verweist). Dann können Sie den Master auschecken, ohne alte Dateien durch das Repo blättern zu müssen. Toll!
Andrew Mao

20

Wenn Sie bereits masterangemeldet sind, können Sie Folgendes tun:

git reset --hard origin/master

Der lokale masterZweig wird auf die entfernte origin/masterStation verwiesen, und alle Änderungen im Arbeitsverzeichnis werden verworfen.


Und löscht Dateien! Wenn Sie Dateien erstellt / bearbeitet und ein "git add" ausgeführt haben, werden diese mit diesem Befehl gelöscht. Sei gewarnt.
Cheeso

Ist dieser Ansatz besser als git checkout -B master origin/master?
Jim Aho
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.