On 2017-02-09, at 5:36 PM, Stephen Morton <stephen.c.mor...@gmail.com> wrote:

> On Thursday, 9 February 2017 17:31:38 UTC-5, Philip Oakley wrote:
> Hi Stephen,
>  
> There is another approach to merging, that is the 'imerge' tool [1], which 
> does consider every commit on both sides of the merge.
>  
> It was developed for the cases where the two branches have diverged in many 
> places.
>  
> The 'i' in 'imerge' is a reference to it creating an incremental image of the 
> merge process, so you can see where the individual commits have conflicts, so 
> you can see where to investigate.
>  
> It allows you (as I understand it) to picks points on the developing merge 
> where there are no conflicts to use as the next commit point(s), so making 
> useful progress quickly.
>  
> Some of the discussion had somewhat diverged between the 'what has Git coded 
> (for merge) and why does it choose to do it that way' and 'how and where 
> should these (tricky) merges be approached from'. Neither is wrong per se, 
> rather they are each right in their own context, but given that the contexts 
> had divereged the approaches had likewise diverged..
>  
> I've not used imerge myself, but it has had some good responses.
>  
> Philip
>  
> [1] 
> https://github.com/mhagger/git-imerge#git-imerge----incremental-merge-and-rebase-for-git
>  see also the linked articles, video, presentation, etc.
>  
> 
> 
> Thanks Philip.
> 
> Magnus already mentioned 'git imerge' on January 26th and I thanked him and 
> wrote a reply about it on the 27th.
> 
> Stephen

I have been following this discussion, and reading about iMerge since it was 
mentioned here.

I see one big difference:
Normal merge only considers the heads, and the common base
iMerge considers every commit along the way.

The idea of "Both branches got a change, and in one it was removed because it 
doesn't work" results in normal merge bringing it back (it is present in one of 
the heads) (the removal is removed), but imerge still gives the removal a 
chance to show up.

Equally, in that "conflicted branch with resolutions" case, imerge would see 
the conflicts and want you to re-resolve them again. (... redundant statement?)

I guess that the question of whether or not to use imerge depends on how you do 
your merging. If the merge is done on a special resolution branch -- i.e., 
something like:
1. Branch master at old point A
2. Long development on newbranch to point B
3. Long development on master to point C
4. Attempting to merge gives too big of a conflict, and is aborted.
5. Branch master at C to resolution.
6. Merge newbranch into resolution. Commit all the conflicts.
7. Have many different workers work on resolving all conflict markers in 
resolution, until the code is conflict free and compiles again.
8. Now merge this new branch into master

-- then you get the benefits of "iMerge" of being able to share your conflict 
resolution with others, but lose the benefit of each stage being incrementally 
simple and testable. On the other hand, you might gain a more 
readable/understandable cleanup changelog/history.

But the two strategies -- using imerge, or using a resolution branch -- seem to 
be fundamentally opposed.

Has anyone actually tried both different methods, that can describe which has 
worked better?

(p.s.: Is it spelled "imerge" or "iMerge", or "Imerge", or ... ?)

---
Entertaining minecraft videos
http://YouTube.com/keybounce

-- 
You received this message because you are subscribed to the Google Groups "Git 
for human beings" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to git-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to