Ho creato un repository, quindi ho apportato alcune modifiche e sembra che abbia rovinato tutto.
Vorrei ricominciare da zero, usando l'attuale upstream / master come base per il mio lavoro.
Devo rifare il repository o eliminarlo?
Ho creato un repository, quindi ho apportato alcune modifiche e sembra che abbia rovinato tutto.
Vorrei ricominciare da zero, usando l'attuale upstream / master come base per il mio lavoro.
Devo rifare il repository o eliminarlo?
Risposte:
La soluzione più semplice sarebbe (usando ' upstream
' come nome remoto che fa riferimento al repository originale biforcato):
git remote add upstream /url/to/original/repo
git fetch upstream
git checkout master
git reset --hard upstream/master
git push origin master --force
(Simile a questa pagina GitHub, sezione "Cosa devo fare se mi trovo in una brutta situazione?" )
Tenere presente che è possibile perdere le modifiche apportate sul master
ramo (sia localmente, a causa del reset --hard
, sia sul lato remoto, a causa del push --force
).
Un'alternativa sarebbe, se vuoi preservare i tuoi commit master
, rigiocare quei commit in cima alla corrente upstream/master
.
Sostituire la parte ripristinata con a git rebase upstream/master
. Sarà quindi necessario forzare la spinta.
Vedi anche " Cosa devo fare se mi trovo in una brutta situazione? "
Una soluzione più completa, il backup del lavoro corrente (per ogni evenienza) è dettagliata in " Pulizia del ramo master git e spostamento di alcuni commit nel nuovo ramo ".
Vedi anche " Estrai nuovi aggiornamenti dal repository GitHub originale nel repository GitHub biforcuto " per illustrare cos'è " upstream
".
Nota: i recenti repository GitHub proteggono il master
ramo da push --force
.
Quindi dovrai master
prima annullare la protezione (vedi foto sotto), quindi proteggerlo nuovamente dopo aver forzato la forza ).
Nota: su GitHub in particolare, esiste ora (febbraio 2019) un collegamento per eliminare i repository biforcati per le richieste pull che sono state unite a monte.
git reset --hard upstream/master
git reset
nella risposta.
git remote
comandi " " in stackoverflow.com/a/3903835/6309 .
Adoro la risposta di VonC. Ecco una versione semplice per i principianti.
C'è un telecomando Git chiamato di origin
cui sono sicuro che tutti voi siete a conoscenza. Fondamentalmente, puoi aggiungere tutti i telecomandi a un repository git che desideri. Quindi, ciò che possiamo fare è introdurre un nuovo telecomando che è il repository originale non il fork. Mi piace chiamarlooriginal
Aggiungiamo i repository originali al nostro fork come telecomando.
git remote add original https://git-repo/original/original.git
Ora prendiamo il repository originale per assicurarci di avere l'ultimo codificato
git fetch original
Come suggerito da VonC, assicurati di essere al comando.
git checkout master
Ora per velocizzare il nostro fork con l'ultimo codice sul repository originale, tutto ciò che dobbiamo fare è resettare il nostro ramo master in conformità con il telecomando originale.
git reset --hard original/master
E il gioco è fatto :)
fatal: ambiguous argument 'original/master': unknown revision or path not in the working tree.
sul passo finale. Qualche consiglio?
original
è migliore di upstream
(utilizzato dai documenti di Github), in quanto origin/master
è "upstream" di local master
. Riduce l'ambiguità. Mi chiedo se questo è il motivo per cui lo usi?
A seguire @VonC ottima risposta. La tua politica aziendale di GitHub potrebbe non consentire la "spinta forzata" sul master.
remote: error: GH003: Sorry, force-pushing to master is not allowed.
Se ricevi un messaggio di errore come questo, prova i seguenti passaggi.
Per ripristinare efficacemente il fork è necessario seguire questi passaggi:
git checkout master
git reset --hard upstream/master
git checkout -b tmp_master
git push origin
Apri il fork su GitHub, in "Impostazioni -> Branches -> Branch predefinito" scegli "new_master" come nuovo ramo predefinito. Ora puoi forzare la spinta sul ramo 'master':
git checkout master
git push --force origin
Quindi è necessario ripristinare "master" come ramo predefinito nelle impostazioni di GitHub. Per eliminare "tmp_master":
git push origin --delete tmp_master
git branch -D tmp_master
Altre risposte che avvertono sulla perdita della modifica sono ancora valide, sii prudente.
(Non a tutti piace fare le cose attraverso l'interfaccia della riga di comando di git)
Una volta impostato, è sufficiente eseguire i passaggi 7-13 da quel momento in poi.
Recupera> verifica ramo principale> ripristina al proprio principale> Invia modifiche al server
Fare doppio clic sul ramo "principale" per verificarlo se non è già stato estratto.
Trova il commit che desideri ripristinare, se hai chiamato il repository "master", molto probabilmente vorrai trovare il commit con il tag "master / master" su di esso.
Fare clic destro sul commit> "Ripristina il ramo corrente su questo commit".
Nella finestra di dialogo, impostare il campo "Utilizzo della modalità:" su "Hard - scarta tutte le modifiche della copia di lavoro", quindi premere "OK" (assicurarsi di inserire prima tutte le modifiche che non si desidera perdere su un ramo separato).
Fatto!