Come posso risincronizzare una forcella dall'originale


33

Ho appena creato un progetto a Github. Ho apportato modifiche e inviato una richiesta pull. Il proprietario ha unito il mio fork al progetto principale e successivamente ha apportato alcune modifiche. Quindi per ora il mio fork non è aggiornato con il progetto principale. Mi mancano le modifiche apportate dopo aver unito la mia richiesta pull. Come posso aggiornare il mio fork con il progetto principale? C'è un modo per farlo nell'interfaccia web?

Grazie


Scrivo una semplice istruzione. controlla qui: webapps.stackexchange.com/a/58140/63016
Youngjae

2
Ora c'è un documento ufficiale che è ben fatto: help.github.com/articles/syncing-a-fork
Andre Miras

Risposte:


36

In base alla progettazione, il fork di un progetto crea un repository separato che non viene aggiornato quando viene modificato il repository originale. Tuttavia, gitrende piuttosto semplice l'aggiornamento manuale.

È necessario l'aiuto di un terzo repository (la tua copia locale è sufficiente). Esistono 3 repository:

  • "Upstream": repository del progetto upstream su Github.
  • "Origine": repository del tuo fork su Github
  • "Locale": il repository locale sul tuo computer. Presumo che tu l'abbia creato clonando Fork usando git clone git@github.com:your-username/projectname.git, e che tutti stiano usando branch master.

Supponendo che attualmente "Origine" e "Locale" si trovino nello stesso stato e che "A monte" sia in anticipo di 1 o più commit (l'unione e le successive modifiche).

Per prima cosa aggiungi il progetto upstream come telecomando Git :

git remote add upstream https://github.com/upstream-username/projectname.git

Quindi tirare (che significa recuperare e quindi unire automaticamente) le modifiche dal masterramo del telecomando al ramo corrente ( master) del repository locale :

git pull upstream master

Ora il tuo repository locale è sincronizzato con upstream. Infine, invia il repository locale al fork di Github:

git push origin master

Ora tutto è sincronizzato.


2
Grazie mille .. è un peccato che ciò non sia possibile per renderlo nell'interfaccia web ..
BAN

1
Ciò è effettivamente possibile sull'interfaccia Web: webapps.stackexchange.com/a/31010/10390
thSoft

Yeehaw! Mi ero strappato i capelli cercando di trovare queste informazioni esplicite. Grazie per la condivisione!
pepoluan

... ma per favore dai un'occhiata anche ai commenti della risposta, dimostrando che Resync via web non è l'opzione migliore in quanto inquina il repository
usr-local-ΕΨΗΕΛΩΝ

cosa fai quando dice "già aggiornato" dopo il pull, ma ovviamente non lo è? (ci sono file che ho cambiato tutti in una sottodirectory e non dovrei avere differenze in nessun altro file, ma lo faccio)
roberto tomás

1

È necessario aggiungere un telecomando (consultare la guida di GitHub ) ed estrarre da quel nuovo telecomando.

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master

0

ho trovato questa risposta per completare la risposta originale in quanto riguarda solo la sincronizzazione di un ramo (master). Inoltre, se il ramo è stato creato a monte dal fork, è un po 'più complicato crearlo sul fork.

La risposta breve è, per aggiornare il fork con ogni ramo nel repository upstream, eseguire questo comando.

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

Ciò che non fa è rimuovere eventuali rami dal fork che sono stati eliminati dall'upstream. Non è possibile automatizzarlo, soprattutto se sono stati creati rami sul fork.

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.