Come reimpostare "master" su "origin / master"?


216

Posso fare quanto segue in un modo più semplice?

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

A volte, questo può essere fatto senza toccare l'albero di lavoro: stackoverflow.com/a/12343727/586086
Andrew Mao

6
Aggiorna la risposta accettata: la risposta di KindDragon è più corretta e più breve.
Robert Siemer,

Risposte:


310

Come KindDragon 's risposta accenna, è possibile ricreare masterdirettamente origin/mastercon:

git checkout -B master origin/master

La git checkoutpagina man menziona:

Se -Bviene fornito, <new_branch>viene creato se non esiste; in caso contrario, viene ripristinato . Questo è l'equivalente transazionale di

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

Inizialmente suggerito:

Qualcosa di simile a:

$ 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

con il passaggio 2 facoltativo.


1
Puoi farlo con una riga.
Robert Siemer,

94

Git supporta questo comando:

git checkout -B master origin/master

Controlla il origin/masterramo e quindi ripristina il masterramo lì.


4
L'unica vera risposta.
Robert Siemer,

3
salva quattro sequenze di tasti: non hai bisogno delle virgolette. Solo: git checkout -B master origin / master
zumalifeguard

diciamo che ho commesso 2 cose, la prima è una fusione con ramo e la seconda è regolare. Cosa succede all'unione se torno all'origine / master?
utdev,

1
non è necessario git fetch origin masterprima di essere sicuro che origin/mastersia aggiornato?
pedrozath,

Sì, ovviamente con tutte le soluzioni che dovresti fare git fetchprima
KindDragon,

29

Penso che anche la risposta di VonC abbia complessità rispetto a questa opzione:

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

git registra automaticamente ogni valore di un ref (tramite il reflog). Quindi dopo aver eseguito quel comando, si master@{1}riferisce al valore precedente di master.

La risposta di VonC è corretta, ma fa perdere tempo a controllare il vecchio valore di master nel filesystem.

Se ti interessano gli oggetti orfani nel repository, puoi eseguirlo git gc


1
Sembra un'alternativa interessante. +1
VonC

Ricevo ancoraAlready on 'master'
yourfriendzak il

@yourfriendzak, ho dimenticato di tenere conto del fatto che potresti aver già verificato il master prima di aggiornare il master. Ho aggiornato la risposta per essere quella che dovrebbe funzionare anche in quel caso.
Alexander Bird,

Funziona anche se non sei sul master (come uno stato HEAD distaccato che in realtà punta all'origine / master della punta). Quindi, è possibile effettuare il checkout del master senza dover capovolgere i vecchi file nel repository. Grande!
Andrew Mao,

20

Se sei già masterattivo puoi effettuare le seguenti operazioni:

git reset --hard origin/master

Indirizzerà il masterramo locale verso il remoto origin/mastere scarterà qualsiasi modifica nella directory di lavoro.


E cancellerà i file! Se hai creato / modificato file e hai eseguito un "git add" su di essi, questo comando li cancellerà. Essere avvisati
Cheeso,

Questo approccio è migliore di git checkout -B master origin/master?
Jim Aho,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.