From: Johannes Sixt Date: Fri, 17 Jul 2009 06:38:17 GMT Subject: Re: [PATCH] Fix rebase -p --onto Message-ID: <4A601C59.8040108@viscovery.net> In-Reply-To: <20090716230031.GM7503@vinegar-pot.mit.edu> Greg Price schrieb: > In a rebase with --onto, the correct test for whether we can skip > rewriting a commit is if it is already on top of $ONTO, not $UPSTREAM. > Without --onto, this distinction does not exist and the behavior does > not change. > > > In the situation > > X---o---o---o---M > \ / > x---x---x---x > > Y > > if we try to move the branches merged at M from their base on X to be > based on Y, so as to get > > X > > Y---o'--o'--o'--M' > \ / > x'--x'--x'--x' > > then we fail. The command `git rebase -p --onto Y X M` moves only the > first-parent chain, like so: > > X > \ > x---x---x---x > \ > Y---o'--o'--o'--M' > > because it mistakenly drops the other branch(es) x---x---x---x from > the TODO file. This tests and fixes this behavior. I think the current behavior is by design. There is nothing to fix. The purpose of rebase -p is to leave non-first children alone and rebase only the first child parenthood chain. It is not the purpose to reseat an entire history DAG. -- Hannes