Unione tra forcelle in GitHub


259

Ho creato un repository GitHub. Quindi ho apportato alcune modifiche al mio fork. Quindi il repository originale ha unito le mie modifiche e alcune altre. Ora, voglio unire quei cambiamenti che mi mancano. Ho provato un semplice pull seguito da push, ma questo ha reso il mio commit in duplice copia. Qual è il modo migliore per farlo?

Risposte:


352

Probabilmente hai un "telecomando" per ciascun repository. Devi tirare da un telecomando e spingere verso l'altro.

Se originariamente clonato dalla forcella, quel telecomando verrà chiamato "origine". Se non l'hai già aggiunto, dovrai aggiungere il repository della prima persona come un altro telecomando:

git remote add firstrepo git://github.com/first/repo.git

Dopo che tutto è impostato, dovresti davvero essere in grado di farlo

git pull firstrepo master
git push origin

Ricorda, git pullnon è altro che una macro che fa git fetche git merge, in questo ordine. Devi solo recuperare l'elenco dei commit dal repository della prima persona e quindi unire il loro ramo nel tuo albero. La fusione dovrebbe fare la cosa giusta con i tuoi impegni su entrambi i rami.

GitHub, in tutta la sua bellezza perpetua, ti dà una scorciatoia, ovviamente. C'è un pulsante "avanzamento rapido" sul fork del repository che è possibile utilizzare per recuperare il fork se si è completamente uniti dall'altra parte.


1
C'è un modo per farlo interamente con operazioni remote? Se ho capito bene, con questo metodo scaricherai tutte le modifiche nel repository locale e poi le caricerai (spingi) tutte sul fork su github. Preferirei in qualche modo tirare tutte le modifiche direttamente nel fork su Github.
Ken Liu,

1
No. Git non lo supporta. Fortunatamente, Github ha ora un pulsante di unione nell'interfaccia web.
cweiske,

13
@cweiske - dov'è questo pulsante Unisci? Ho consultato tutte le pagine di amministrazione e le pagine principali, ma non riesco a trovarlo :(.
Adam

2
@Adam, si trova nella pagina Richiesta pull. Quindi il forker avrebbe aperto una richiesta pull per unire uno dei suoi rami a uno dei tuoi. Lì puoi fare clic sul pulsante Unisci.
Rob Barreca,

2
Il pulsante Avanzamento rapido non sembra più disponibile. Per informazione, ho usato un altro URL git all'interno del mio comando:git remote add snaury git@github.com:snaury/script-runner
olibre

72

Quindi la risposta accettata sopra non ha funzionato perfettamente per me. Vale a dire, quando ha funzionato, sembrava perdere il collegamento con l'autore originale di Github, e dopo non ha più funzionato. Penso che il problema fosse che la risposta ha lasciato fuori il / tra il nome remoto e il ramo. Quindi recupererebbe un ramo chiamato master dal telecomando, ma non sarà in grado di farci nulla. Non so davvero perché.

Ecco come Github consiglia dal loro sito .

Dopo aver clonato il repository biforcato, è necessario aggiungere un telecomando che punta all'originale come indicato nella risposta precedente. A loro piace chiamarlo a monte, ma non importa.

git remote add upstream git://github.com/octocat/Spoon-Knife.git

Quindi vai a prendere

git fetch upstream

e vedrai le versioni disponibili per l'unione

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

Quindi devi solo scegliere il ramo in cui vuoi unirti. Ricordati che questi non sono rami locali, sono memorizzati sotto i telecomandi. Ma purché non si disponga di una filiale locale denominata upstream / master (che è consentita), è consigliabile unire la riga seguente:

git merge upstream/master

In alternativa, puoi utilizzare il collegamento per recuperare / unire (almeno dopo il recupero iniziale) con questa riga:

git pull upstream/master

Il problema è che se si dispone già di modifiche, le modifiche incorporate creeranno un commit di unione. Utile in alcuni casi, ma il più delle volte un po 'inutile.
Pablo Olmos de Aguilera C.,

1
In quei casi l'uso git rebasefunzionerebbe molto meglio, e tralascerebbe quei brutti merge vuoti che si uniscono
Fruch
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.