ho usato per lavorare con 3-way merge strumenti come BC3, SourceGear, o P4, che mostrano di solito 4 componenti: base di, lasciato, destra, e risultato fusa.Git 4-way merge
Cosa Git sembra fare, ed è giusto così soprattutto nei casi di un git rebase --onto
sembrano essere una fusione a 4 vie: sinistra-base, sinistra, destra-base, destra, risultato unito. O in altre parole, prendendo la patch diff fatta sul lato sinistro (locale), e cercando di unirla con una patch diff fatta sul lato destro (remoto).
unita = Sinistra-Diff-Path + Destra-Diff-Path
Vuoi sapere nulla di buono strumento che mostra i 4 componenti, se non v'è alcun tipo di sostegno al giorno d'oggi?
Potete fornire qualche chiarimento su come P4Merge per esempio potrebbe essere usato per unire 4 versioni di file come descritto nella domanda, se è possibile? Mi trovo a voler unire le modifiche in un ramo in un altro ramo che ha subito le sue modifiche da quando è derivato dal primo. So che Team Foundation Server può farlo automaticamente (per la maggior parte delle parti) se si effettua il check-in, ma voglio farlo prima di controllare qualche cosa a volte. – BlueMonkMN
Questo non è quello che è stato chiesto. Se vuoi unire 4 variazioni, puoi con octopus unire 'git unire branch1 branch2 branch3 branch4'. Se si ottengono conflitti, l'unione di polpo si interrompe, non è possibile risolvere più di 2 versioni in conflitto. Detto questo, puoi unire ciascuno di essi 1 alla volta. quindi schiaccia tutte le unioni nel primo. Si conserva quello che sarebbe stato se i genitori avessero lavorato la fusione di polpo scrivendo tutti gli SHA1 delle punte dei rami che si stanno unendo su linee separate in '.git/MERGE_HEAD'. Ora quando ti impegni, il commit che generi avrà i 4 genitori che vuoi. –
Dopo ulteriori ricerche, ho appreso che la mia comprensione della fusione a 3 vie deve essere stata confusa e tutto ciò di cui avevo davvero bisogno era una semplice unione a 3 vie nel mio caso. Dispiace per la confusione. Ho pensato che quando avevo due rami, una versione root comune e una versione modificata di un ramo che volevo unire nell'altro avevo bisogno di più di un'unione a 3 vie, ma non l'ho fatto. Posso semplicemente ignorare la versione radice comune apparentemente e le cose funzionano benissimo nel mio caso. – BlueMonkMN