On Friday 11 February 2011, skillzero@xxxxxxxxx wrote: > On Thu, Feb 10, 2011 at 1:13 PM, John Wiegley <johnw@xxxxxxxxxxxx> wrote: > > a b c 3' d e* f > > o---o---o---o---o---o---o > > \ > > o---o---o---o > > 1 2 3 4 > > > > At a later date, I want to rebase the private branch onto master. What > > will happen is that the changes in 3 will conflict with the rewritten > > changes in e*. However, I'd like Git to know that 3 was already > > incorporated at some earlier time, and *not consider it during the > > rebase*, since it doesn't need to. > > I don't know very much about how git really works so what I'm saying > may be dumb, but rather than record where a commit came from, would it > be reasonable for rebase to look at the patch-id for each change on > the topic branch after the merge base and automatically remove topic > branch commits that match that patch-id? So in your example, rebase > would check each topic branch commit against 3', d, e*, and f and see > that the 3' patch-id is the same as the topic branch 3 and remove > topic branch 3 before it gets to e*? I believe "git rebase" already does exactly what you describe [1]. However, comparing patch-ids stops working when the cherry-pick (3 -> 3') has conflicts. IINM, it is the conflicting cases that John is interested in solving... ...Johan [1]: I tested the above scenario, and got no conflicts: $ git init $ FOO=a && echo $FOO > $FOO && git add $FOO && git commit -m $FOO $ FOO=b && echo $FOO > $FOO && git add $FOO && git commit -m $FOO $ FOO=c && echo $FOO > $FOO && git add $FOO && git commit -m $FOO $ git checkout -b topic $ FOO=1 && echo $FOO > $FOO && git add $FOO && git commit -m $FOO $ FOO=2 && echo $FOO > $FOO && git add $FOO && git commit -m $FOO $ FOO=3 && echo $FOO > $FOO && git add $FOO && git commit -m $FOO $ FOO=4 && echo $FOO > $FOO && git add $FOO && git commit -m $FOO $ git checkout master $ git cherry-pick topic^ $ FOO=d && echo $FOO > $FOO && git add $FOO && git commit -m $FOO $ echo e >> 3 && git add 3 $ FOO=e && echo $FOO > $FOO && git add $FOO && git commit -m $FOO $ FOO=f && echo $FOO > $FOO && git add $FOO && git commit -m $FOO $ git checkout topic $ git rebase master First, rewinding head to replay your work on top of it... Applying: 1 Applying: 2 Applying: 4 $ # Look, no conflicts. -- Johan Herland, <johan@xxxxxxxxxxx> www.herland.net -- 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