Quoting Junio C Hamano <gitster@xxxxxxxxx>: > "David Jeske" <jeske@xxxxxxxxxxxxxx> writes: > >> If I understand it right (and that's a BIG if), it's the same as doing a merge >> of C into G where every individual commit in the C-line is individually >> committed into the new C' line. >> >> ...........-------------A---B---C >> ........../ / / / >> ........./ /---A'--B'--C' topic >> ......../ / >> ....D---E---F---G - master >> >> >> (1) Is the above model a valid explanation? > > I would presume that the resulting trees A' in the second picture and in > the first picture would be the same, so are B' and C'. But that is only > true when commits between A and C do not have any duplicate with the > development that happened between E and G. Sorry, but I think you are wrong, Junio. Rebase can be used to backport changes, not just porting your changes forward, using --onto option: ..........maint ............1-------A'--B'--C' .........../ . . . <-- ??? ........../.......A---B---C ........./......./ ......../......./ .......0--...--D---E---F---G - master Here, A, B, C that are based on D (that is way ahead of the top of the maintenance branch 1) is rebased to the maintenance branch. But in this case, A' is *not* a merge between 1 and A. For A' to be a merge between 1 and A, it *must* contain all the development that happened up to 1 and all the development that happened up to A since these two branches were forked (that is 0 in the above picture). Instead, the difference to go from 1 to A' is similar to the difference to go from D to A. It does not and must not include anything that happened between 0 and D. That is not a merge. I agree that your explanation why A is not recorded as a parent of A' is right for the philosophical reason (the purpose of rebasing to create A' is so that you do not have to record them). But from the point-of-view of correctness of commit history, I think A must not be recorded as a parent of A', either. -- Nanako Shiraishi http://ivory.ap.teacup.com/nanako3/ -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html