From: Fedor Sergeev <Fedor.Sergeev@Sun.COM>
To: Junio C Hamano <gitster@pobox.com>
Cc: Roman.Shaposhnick@Sun.COM, git@vger.kernel.org
Subject: Re: overly smart rebase - bug or feature?
Date: Tue, 11 Nov 2008 02:36:49 +0300 [thread overview]
Message-ID: <20081110233649.GI6799@sun.com> (raw)
In-Reply-To: <7vod0n41i5.fsf@gitster.siamese.dyndns.org>
On Mon, Nov 10, 2008 at 03:14:42PM -0800, Junio C Hamano wrote:
> Fedor Sergeev <Fedor.Sergeev@Sun.COM> writes:
>
> > I have recently hit a behavior which might well be a feature,
> > but it was very surprising (in a bad sense) to me.
>
> It is a feature misfiring.
>
> Rebase is essentially a repeated cherry-pick, and a cherry-pick of commit
But cherry-pick does fail, as shown in my original mail!
> A on top of commit B is done by a simplified 3-way merge between A and B
> using the parent of A as the common ancestor.
>
> A A'
> / /
> A^... pseudo history ...---B
Well, my history is exactly that, not pseudo (and I dont quite follow your reasoning
yet to understand whether this is important or not):
A B
\ /
A^
A^ *is* a common ancestor of both A and B.
>
> When your history has renamed Makefile to Makefile2 (thereby losing
> Makefile)
My history did not rename Makefile.
There were three identical Makefiles (in A^)
After that one was deleted (in B).
On alternative branch it was edited (in A).
If I do *merge* A into B then it fails.
If I do *cherry-pick* A into B then it fails.
If I do *rebase* A onto B then it succeeds.
> while transition from A^ to A modified Makefile, the difference
> between A^ to A that is applied to B to produce A' contains only the
> change about Makefile (and does not talk about the unchangedness of
> Makefile1 nor Makefile2 --- in fact, when A' is created, the machinery
> does not even know if A^ and A had Makefile1 or Makefile2).
>
> When applying the change to Makefile, it notices that B does not have
> Makefile, but there is a path that is _identical_ to the preimage your
> change applies to (namely, Makefile2). To support people who rename
> Makefile to Makefile2 in the history that led to B
There was no rename. There was a copy in initial commit (and you cant say if it
was Makefile copied into Makefile2 or vice verse).
I dont believe it should really be called "rename", even if one of the copies was killed later.
>, rebase (actually the
> underlying "am -3" it calls is where this rename detection smart lies)
> applies the changes to the "renamed" path.
In this given case both Makefile1 and Makefile2 were absolutely equal.
If rebase chose to edit Makefile2 why didnt it change Makefile1?
>
> You might be able to work this around by forcing rebase not to use the
> simplified 3-way merge, by saying "rebase -m".
Yeah, it worked.
...
CONFLICT (delete/modify): Makefile deleted in master and modified in HEAD~0. Version HEAD~0 of Makefile left in tree.
...
Though it does make me wonder why *simplified* 3-way merge is smarter than git merge ;)))
best regards,
Fedor..
next prev parent reply other threads:[~2008-11-10 23:39 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-10 21:23 overly smart rebase - bug or feature? Fedor Sergeev
2008-11-10 23:14 ` Junio C Hamano
2008-11-10 23:31 ` Avery Pennarun
2008-11-10 23:36 ` Fedor Sergeev [this message]
2008-11-10 23:57 ` Junio C Hamano
2008-11-12 21:39 ` Fedor Sergeev
2008-11-12 22:04 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081110233649.GI6799@sun.com \
--to=fedor.sergeev@sun.com \
--cc=Roman.Shaposhnick@Sun.COM \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.