merge fast forward

Masklinn masklinn at masklinn.net
Mon May 17 16:48:12 CDT 2010


On 17 mai 2010, at 22:37, Steve Borho <steve at borho.org> wrote:
> On Mon, May 17, 2010 at 3:22 PM, Masklinn <masklinn at masklinn.net>  
> wrote:
>> On 2010-05-17, at 20:13 , Faheem Mitha wrote:
>>>
>>>
>>> Hi Everyone,
>>>
>>> An extract from chatter on #mercurial on IRC. I thought I'd post  
>>> in case anyone had any thoughts about this. A short addition -  
>>> actually one could include in this case all cases where merges  
>>> could be handled programatically, ie.
>>>
>>> hg merge other --fast-forward --select-everything-from-other-branch
>>>
>>> The only cases one really needs to use the wd are ones which  
>>> cannot be handled programatically, ie. which require a merge editor.
>>>
>>>                                                       Regards,  
>>> Faheem.
>>>
>>> 12:42 < faheem_> it would be nice if there was a merge in memory  
>>> option for merges you know will work without manual intervention
>>> 12:44 < muggs> faheem_: bypassing the working copy?
>>> 12:45 < muggs> something like:  hg merge OTHER --fast-forward
>>> 12:45 < muggs> if any file merges are required, it aborts?
>>> 12:49 < muggs> it's probably not easy to divorce the merge  
>>> algorithm from the dirstate
>>> 12:49 < faheem_> muggs: are they closely linked together?
>>> 12:50 < muggs> it's where it resolves renames, permissions, and such
>>> 13:00 < faheem_> muggs: one problem with that approach is that  
>>> there could
>>> still be conflicts with working copy
>>> 13:00 < faheem_> which you wouldn't know about till you tried to  
>>> update to the merge
>>> 13:01 < faheem_> since obviously such an operation wouldn't change  
>>> the wd
>>> 13:01 < muggs> sure, it's equivalent to doing a quick clone,  
>>> merging, commiting, pulling, then deleting the clone
>>> 13:02 < faheem_> muggs: yes
>>> 13:02  * muggs wonders if you could just allocate a fake dirstate  
>>> to merge with
>>> 13:03 < muggs> btw: I use the term fast-forward for a reason; this  
>>> is the technical term for conflict-less merges.  git has special  
>>> code for them
>>
>> Uh… fast-forward isn't a merge without conflicts, it's a merge whe 
>> re there is no divergence (though it's a subset of merges with no  
>> conflicts, they're not the same thing).
>>
>> Example:
>>
>>          A---B---C topic
>>         /
>>    D---E master
>>
>> in this case, if you merge topic into master you get
>>
>>          A---B---C topic
>>         /         \
>>    D---E-----------F master
>>
>> but if you merge with fast forward enabled you end up with
>>
>>    D---E---A---B---C master
>>
>> Note how the final graphs are entirely different.
>
> Ah, it's actually a rebase.  My lack of git knowledge strikes again.
> This will need another catch-phrase.
>
Yes, I guess it can be seen as a very restricted kind of rebase  
specifically for the cases where there is nothing to rebase.



More information about the Mercurial-devel mailing list