Thread (14 messages) flat view 14 messages, 5 authors, 2016-06-15

Re: [RFC] Replace rebase with filtering

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:49

Hi,

On Tue, 16 Jan 2007, Steven Grimm wrote:
Steven Grimm wrote:
quoted
Johannes Schindelin wrote:
quoted
I had the impression that the use of "--ignore-if-in-upstream" in
git-rebase avoids exactly this case: re-applying changes which are already
in upstream.  
Where's that option documented? The manpage makes no mention of it at all.
Ah, okay, poking around in the git-rebase source, I see you mean that
git-format-patch is called with that option. Gotcha. The problem is that after
a rebase, the revisions in question *aren't* in the upstream. Here's my
understanding of why. Say I have this in my integration repository:

a---b---c---d (master)
\
 e---f---g   (integration)

Now, I rebase the integration branch onto master:

a---b---c---d
            \
             e'---f'---g'

The problem is that, since e' contains all the changes in e *and* in 
b/c/d, it does not have the same SHA1 as the original e revision, nor in 
fact the same hash as any of the revisions in the pre-rebase tree. And 
after rebase succeeds, it wipes the original e, f, and g from the 
history of the integration branch.
That is correct, but --ignore-if-in-upstream actually tests the hash of 
the _diff_, not of the commit. So, if c really introduces the same change 
as f (i.e. the diffs are identical), git-rebase will ignore f:

a---b---c---d
             \
              e'---g'

Totally untested, of course. But this is what --ignore-if-in-upstream was 
written for.

Ciao,
Dscho
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help