git scarta tutte le modifiche e tira da monte


145

Come posso recuperare il repository upstream e farlo sostituire come master? Ho solo un ramo nel mio repository, che è il master, e l'ho completamente incasinato, quindi ho praticamente bisogno di ricominciare da monte. Penso che init farà il lavoro, ma c'è un modo più semplice?

Risposte:


251

Ci sono (almeno) due cose che puoi fare qui: puoi riposare il repository remoto, oppure puoi reset --hardfarlo all'antenato comune e quindi eseguire un pull, che avanzerà rapidamente all'ultimo commit sul master remoto.

Per essere concreti, ecco una semplice estensione della risposta originale di Nevik Rehnel:

git reset --hard origin/master
git pull origin master

NOTA : l'utilizzo git reset --hardannulla qualsiasi modifica non impegnata e può essere facile confondersi con questo comando se non si ha familiarità con git, quindi assicurarsi di avere un'idea di ciò che sta per fare prima di procedere.


1
Altro aiuto per i principianti là fuori: git gcpulisce e corre attraverso un po 'di pulizie. In un'altra nota, non ho mai corso git gc. È bello correre, ma non è necessario.
Joshua Dance,

@JoshuaDance - buon punto. Non sono sicuro del motivo per cui l'ho incluso inizialmente.
Eric Walker,

23

mentre sei sul branch master: git reset --hard origin/master

poi fai un po 'di pulizia git gc(di più su questo nelle pagine man)

Aggiornamento: Probabilmente dovrai anche fare un git fetch origin(o git fetch origin masterse vuoi solo quel ramo); non dovrebbe importare se lo fai prima o dopo il reset. (Grazie @ eric-walker)


1
Potrebbe essere necessario fare un tiro dopo il reset --hard.
Eric Walker,

Non è necessario estrarre dal master una volta eseguito git fetch origin prima del ripristino.
sciritai,

@sciritai: il mio commento è stato aggiunto prima della menzione del recupero dall'origine.
Eric Walker,

19

Puoi farlo con un solo comando:

git fetch --all && git reset --hard origin/master

O in una coppia di comandi:

git fetch --all
git reset --hard origin/master

Nota che perderai TUTTE le modifiche locali


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

voilà, ora il tuo fork è tornato come a monte.


0

Finalmente ho capito ora che invece di git fetch --all && git reset --hard origin/master, dovrebbe essere git fetch --all && git reset --hard origin/<branch_name>, invece (se si lavora su un ramo diverso)

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.