2016-07-15 127 views
5

Probabilmente non sto ottenendo qualcosa di giusto, ma qualcuno potrebbe spiegarmi perché lo git rebase provoca conflitti, mentre lo git merge (stesso ramo) no?Git: Perché rebase genera conflitti mentre l'unione non lo fa?

Per quanto ne so, lo git rebase mette i commit dall'altro ramo prima dei commit effettuati sul mio ramo corrente, mentre lo git merge prende quegli stessi commit e li applica al mio ramo come patch, giusto? Il diff non è lo stesso, anche se forse invertito? Non sono sicuro perché il patching del mio ramo con gli altri commit non sia un problema, mentre l'applicazione di patch all'altro ramo con i miei commit è.

risposta

3

Durante un rebase, si applicano tutti i commit di qualche ramo su un altro. È possibile che uno di quei commit abbia un conflitto che hai risolto in un commit successivo. Quindi, l'operazione di unione non ha alcun conflitto mentre il rebase porta a conflitti intermedi.

Vedere anche git rerere che consente di risolvere automaticamente i conflitti già risolti.

+0

Capisco cosa stai dicendo, ma non riesco ancora a capirlo. Dì che il mio ramo A ha commesso a, be c. Quindi creo il ramo B con commit d ed e. Il commit f viene eseguito sul ramo A. ** Rebase ** (mentre sul ramo B) risulterebbe in: a, b, c, f, d, e; ** unione ** risulterebbe in: a, b, c, d, e, f. Ora, come mai potrebbe commettere f creare un conflitto di unione con commit c se è stato creato in cima al commit c sul ramo A in primo luogo? – minitauros

+0

@minitauros (1) Un'unione si tradurrebbe in due rami uniti: uno con a, b, c, f e uno con a, b, c, d, e, non una cronologia lineare. (2) Se il commit F, creato sul ramo A, non introduce alcun conflitto, allora non riesco a vedere come potrebbe introdurre un conflitto durante la ridefinizione (se si dispone di un esempio più dettagliato, sarebbe grandioso). (3) Ma se D confligge con F ed E corregge quel conflitto, allora un rebase replicherebbe il conflitto mentre una fusione non lo farebbe. – coredump

+1

Ok allora, grazie per la spiegazione! Lo chiarisce un po '. Sfortunatamente non ho più l'esempio presente (come ho risolto), ma se ci riesco di nuovo e se la stessa domanda si pone, aggiornerò questo post con maggiori informazioni :). Per ora penso che questa risposta sia abbastanza buona, grazie! – minitauros