Junio C Hamano <gitster@xxxxxxxxx> writes: > Junio C Hamano <gitster@xxxxxxxxx> writes: > >> I wonder if it will be the right way to get a correct result to >> apply the difference to go from B to Z on top of an old commit when >> you are side-porting. >> >> Imagine you want to backport the same X-Y history by redoing the >> merge Z on top of another child of O (i.e. A's sibling). That is, >> you start from this: >> >> >> X---Y >> / \ >> O---A---B---Z--- >> \ >> M---N >> >> and would want to create this: >> >> >> O X'--Y' >> \ / \ >> M---N---A'--B'--Z'-- >> >> As long as everything down to the merge-base of the parents of the >> original merge (in this example, merge-base across Y and B that are >> Z's parents, which is A) is being transplanted, "apply the >> difference going from B to Z, on top of B', to obtain Z'" should >> work, I would think. > > And just after I send the message because I needed to catch a bus, I > notice that there is a problem. > > Actually, "replay diff going from B to Z instead of merging" must be > done very carefully. Imagine when Y in the original history were a > cherry-pick of M. What you would be creating would look more like > this instead: > > O X'--. > \ / \ > M---N---A'--B'--Z'-- > > because Y' becomes a no-op, as the transplanted history already has > M applied. But the original "diff going from B to Z" has the effect > of M already in there. You would end up adding the same hunk twice > without noticing. You somehow need to come up with a way to deal > with this. Nope. It seems like cherry-pick takes care of that: [SCRIPT] git init t; cd t; git config rerere.enabled false cat > a <<EOF Line01 Line02 Line03 Line04 Line05 Line06 Line07 Line08 Line09 EOF git add a git commit -aqm "A" git checkout -b two-chunks sed -i -e 's/Line04/Line04_1/' a sed -i -e 's/Line08/Line08_1/' a git commit -aqm "A_04_08_1" git checkout master sed -i -e 's/Line04/Line04_1/' a git commit -aqm "A_04_1" git cherry-pick two-chunks git log --oneline cat a [/SCRIPT] What do I miss? -- Sergey. -- 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