git-imerge – incremental merge and rebase for Git

git-imerge offers incremental merge and rebase for Git.

It performs a merge between two branches incrementally.This is a new merging method.

If conflicts are encountered, figure out exactly which pairs of commits conflict, and present the user with one pairwise conflict at a time for resolution.

git-imerge has two primary design goals:

  • Reduce the pain of resolving merge conflicts to its unavoidable minimum, by finding and presenting the smallest possible conflicts: those between the changes introduced by one commit from each branch.
  • Allow a merge to be saved, tested, interrupted, published, and collaborated on while it is in progress.

Features include:

  • Presents conflicts pairwise: you only ever need to resolve one commit from each branch at a single time.
    • Small conflicts (much easier to resolve than large conflicts).
    • You can view commit messages and individual diffs to see what each commit was trying to do.
  • Records all intermediate merges with their correct ancestry, as commits in your repository. An incremental merge that is in progress:
    • …can be interrupted.
    • …can be pushed to a server.
    • …can be pulled by a colleague, worked on, and pushed again.
  • Never shows the same conflict twice. Once a conflict has been resolved, it is stored in the DAG to make future merges easier.
  • Lets you test every intermediate state. If there is a problem, you can use “git bisect” to find the exact pairwise merge that was faulty. You can redo that merge and continue the incremental merge from there (retaining earlier pairwise merges).
  • Largely automated and surprisingly efficient.
  • Allows the final merge to be simplified for the permanent record, omitting the intermediate results.

Developer: Michael Haggerty and contributors
License: GNU General Public License v2.0

git-imerge is written in Python. Learn Python with our recommended free books and free tutorials.

Return to Git Tools Home Page

Share this article