2013-03-06 31 views
35

mio git repo si presenta così:L'unione di un ramo in un altro è un'unione a due vie?

  _ branch_a 
     /
master/
     \_ branch_b 

Ora voglio fondere branch_b in branch_a, non uno dei due rami in master.

Così, ho fatto

git checkout branch_a 
git merge branch_b 

E git andato e trovato un paio di conflitti.

Quando faccio git mergetool utilizzando meld quello che ottengo sulla console è

{local}: modified file 
{remote}: modified file 

e una finestra che mostra solo locale e remota.

Quello che voglio sapere è:

  1. Perché non è la base condivisa di ciò che era in master mostrato?

  2. Tra LOCAL e REMOTE, quale dovrei modificare?

+7

Se vuoi unire A in B i comandi corretti sono 'git checkout branch_b git merge branch_a' – iberbeu

+0

Quale versione di git stai usando? Quando uso la fusione come un mergetool lo presenta come una unione a tre vie fuori dalla base comune. Non l'ho mai visto mostrare solo due file, quindi non ho idea di quale modifica ci si aspetta. – qqx

+0

git versione 1.8.1.2 – EMiller

risposta

11

Se si unisce un ramo Un in un ramo B i conflitti che si ottiene arriva dalla differenza tra entrambi i rami e non dalla differenza con il maestro. esecuzione git diff in A o B vi darà comunque il diff con mastere dal momento che è l'antenato

Normalmente il locale ramo dovrebbe essere quello siete fusione in e la remota quello che si desidera unire. Comunque nel tuo computer avrai solo una copia del file quindi modificalo solo

+0

È tecnicamente vero che il ramo "master" non sarà coinvolto in questa unione. Ma il commit che il master indica in quel caso sarebbe dato che è l'antenato comune. – qqx

+0

Il diff di un ramo (a o b) è preso dal confronto con l'antenato (maestro in questo caso) che è vero, ma quando si fondono A in B i conflitti sono dati da quei rami e non dal maestro. Questo è ciò che intendevo. Ho modificato la mia risposta – iberbeu