Perform a merge between two branches incrementally. 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. 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. Multiple incremental merges can be in progress at the same time. Each incremental merge has a name, and its progress is recorded in the Git repository as references under refs/imerge/NAME. The current state of an incremental merge can be visualized using the diagram command. An incremental merge can be interrupted and resumed arbitrarily, or even pushed to a server to allow somebody else to work on it.