From: しらいしななこ Date: Fri, 27 Jun 2008 10:33:28 GMT Subject: Re: is rebase the same as merging every commit? Message-ID: <20080627193328.6117@nanako3.lavabit.com> In-Reply-To: <7vzlp7n1j4.fsf@gitster.siamese.dyndns.org> Quoting Junio C Hamano : > "David Jeske" 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/