On Mon, May 16, 2011 at 08:33:59PM -0400, Andrew Wong wrote:
On 05/16/2011 04:36 PM, Junio C Hamano wrote:
quoted
F---* feature
/ /
B---M master
But what does it mean to rebase that on top of master, preserving merges
in the first place? You are already on top of 'master' and '*' itself
should be what you should get, no? IOW, shouldn't you already be
up-to-date?
Since preserve-merge uses the interactive-rebase, I think
interactive-rebase should still pick the merge commit, which will
then be consistent with what's happening if we rebase onto "F". So,
without knowing whether "F" or "M" is the first-parent, I think
interactive-rebase onto "F" and onto "M" should have the same effect.
i.e. interactive-rebase picks the merge commit
Is it really the first-parentness here that is important to the
asymmetry? I thought it was more the fact that "feature" has the merge,
but "master" does not.
Therefore, "git rebase -p master feature" knows that there is nothing to
do; we already contain all of "master".
But "git rebase -p feature master" sees that we have an extra commit in
"feature" not in "master", and therefore we must attempt to rewrite on
top of that merge commit. Of course, when we try to do so, there are no
commits that are not already on "feature", so there is nothing to
rewrite.
So the outcomes are the same, but the reasoning is different. And isn't
that what happens with Junio's patch (I tried a simple test and it
seemed to be)?
-Peff