Junio C Hamano schrieb: > Johannes Sixt <j.sixt@xxxxxxxxxxxxx> writes: > >> 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 >>> ... >>> 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. > > Hmm, if the original history were > > .---X---o---o---o---M > \ / > x---x---x---x---x > > Y > > and the rebase is about moving history leading to M since X on top of Y, > I would actually have agreed that this > > .---X---o---o---o---M > \ / > x---x---x---x---x > \ > Y---o'--o'--o'--M' > > would be the right thing to do (IOW, I would agree with you). > > Can the current code distinguish the two cases? More generally, can we > always tell these two cases apart, or is it fundamentally not possible to > differentiate the two cases and we should simplify the problem space by > limiting ourselves by treating the first parent in a special way? I have used rebase -i -p in the past to rewrite history that involves merges of topic branches like this: ---------Y--M--M--F <-- master / / ----a--a--a / / --b--b--b--b where F is a fixup that I want to insert between Y and M, and I thought rebase -i -p was intended for this use-case. With this in mind, I do not see why should we distinguish the cases. I would even go so far to say that this is OK: X---a---o---o---M X---a \ / ===> \ x---x---x x---x---x \ Y Y---a'--o'--o'--M' -- 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