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.