Git estrae un ramo da un altro repository?


90

Ho un repository git locale che è un clone di un repository su GitHub. Qualcuno ha biforcato il repository e ha apportato modifiche in un nuovo ramo su un nuovo repository. Voglio spostare questo nuovo ramo nel mio repository (localmente per lavorarci prima prima di fonderlo con il master).

Ho provato a creare un nuovo ramo e quindi a estrarre dal repository biforcuto ma si lamenta perché il nuovo ramo è una copia del ramo principale così come il file locale cambia, quindi dice

error: Your local changes to the following files would be overwritten by merge.

Quindi come posso inserire il ramo nell'altro repository in un nuovo ramo nel mio repository locale?

Spero che abbia un senso. In caso contrario, questo è il mio repository: https://github.com/MatthewLM/cbitcoin

Come puoi vedere, qualcuno ha creato un nuovo repository con il ramo "linuxBuild": https://github.com/austonst/cbitcoin/tree/linuxBuild

Voglio quel ramo sul mio repository locale per MatthewLM / cbitcoin.

Come posso fare questo?

Risposte:


161

È necessario assicurarsi che ciò git statusdimostri che non esistono modifiche non programmate nel repository locale.
Puoi farlo prima nascondendo le modifiche locali e poi estraendo quel ramo. Successivamente puoi applicare la tua scorta.


Se vuoi ricreare la struttura del ramo del fork nel tuo repository locale, puoi fare quanto segue:

git remote add fork <url of fork>
git fetch fork
git checkout -b fork_branch fork/<branch>

Questo creerà il ramo locale fork_branchcon la stessa storia <branch>del fork, cioè fork_branchsi diramerà dal tuo masterdove <branch>fa nel fork. Inoltre, il tuo ramo locale ora seguirà quel ramo nel bivio, in modo che tu possa facilmente inserire le nuove modifiche apportate nel bivio.

Penso che tu debba ancora assicurarti in anticipo che la tua copia di lavoro non contenga modifiche.


Ok grazie. Sarebbe fantastico se volessi le mie modifiche locali e i commit non trovati nel ramo dal fork. Ma cosa succede se voglio che il nuovo ramo sia esattamente come è nel repository fork? Ciò include la rimozione di eventuali commit dal mio repository dopo che è avvenuto il fork per questo nuovo ramo. In questo modo sarebbe come se il ramo fosse stato creato sul mio repository piuttosto che su uno biforcato.
Matthew Mitchell

Bene, la tua risposta è una soluzione accettabile per quello che devo fare, ma la troverei più semplice se potessi inserire un nuovo ramo in un repository. Aspetterò un po 'per vedere cosa dicono gli altri.
Matthew Mitchell

@MatthewMitchell: controlla l'aggiornamento. È quello che stavi cercando?
Daniel Hilgarth,

Bene, ho usato il metodo di unirlo con un altro ramo (l'ho appena unito al master) alla fine, ma nel caso in cui voglio solo un ramo esattamente come è da un altro repository, proverò il recupero e metodo di pagamento che hai descritto. Grazie.
Matthew Mitchell

Utilizzato per migrare un altro ramo "gh-pages" da un altro repository!
Marcello de Sales

39

Metodo senza aggiungere telecomando.

git checkout --orphan fork_branch
git reset --hard
git pull <url of fork> <branch>

2
Grazie per questo, l'ho aggiunto ai segnalibri e continuo a tornarci!
Shane Smiskol

2
Migliore risposta per il 2020
Diamond
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.