2011-01-26 9 views
7

Ho due "rami", entrambi partiti dalla stessa base di codice, ma entrambi sono stati importati in git dopo la loro divergenza. La storia precedente è andata perduta, e in aggiunta entrambe le filiali hanno registrato numerose modifiche nella loro cronologia git.Git: Come faccio a unire rami complessi che sono stati ampiamente divergenti con alcune cronologie mancanti?

Qual è una buona strategia per avvicinarsi alla fusione di funzionalità e correzioni di bug tra questi due rami in modo gestibile?

C'è uno strumento che mi aiuterà a separare le differenze nelle importazioni originali in commit significativi?

+0

Quando dici che la cronologia precedente è stata persa, vuoi dire che non esiste una copia esistente della fonte prima che questi due repository/"rami" fossero creati? – Cascabel

+0

Inoltre, qual è lo scopo della fusione che stai tentando di fare? Ricombina i due in uno e vai da lì con un normale flusso di lavoro? Continua separatamente e scegli le cose di tanto in tanto? – Cascabel

+0

Jefromi, è corretto - nessuna copia della fonte precedente. Entrambi i repository continueranno a essere elaborati separatamente, ma vorrei unire (cherry-pick?) I cambiamenti di uno di essi nell'altro. – fuzzyTew

risposta

1

Sembra che tu voglia mantenere la cronologia. Vorrei utilizzare rebase --onto con --preserve-merges per spostare funzionalità/bug al ramo che si desidera continuare a utilizzare. Se si trovano in una struttura diversa per qualche motivo, creare una nuova diramazione, quindi eseguire un filter-branch con l'operazione ad albero per rendere la struttura uguale. Quindi rebase --onto --preserve-merges come nel primo scenario.

Spero che questo aiuti.

+0

Grazie per la risposta. Sono un po 'nuovo da git, quindi mi ci vorrà un po' per leggere quei comandi e opzioni e vedere se riescono a fare ciò di cui ho bisogno. Il codice si è spostato all'interno dei file e nella struttura delle directory. – fuzzyTew

+0

buona fortuna leggendo su di esso. Ricorda, è basato sullo snapshot! –

+2

crea alcune copie del repository e prova per vedere cosa fanno i comandi. Consiglio di eseguire gitk --all e di aggiornarlo regolarmente per vedere visivamente cosa sta succedendo. –

Problemi correlati