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.
- 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