{"slug": "mergiraf", "name": "Mergiraf", "category": "git", "category_name": "Git and code hosting", "description": "", "recommenders": 8, "commenters": 12, "warners": 1, "score": 6.889, "rising": -2.62, "first": "2025-11-12", "latest": "2026-07-13", "why": "the one I am enthusiastic about today is Mergiraf: https://codeberg.org/mergiraf/mergiraf", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 9, "neutral": 2, "compare": 1, "warn": 1}, "spark": [1, 0, 0, 0, 4, 1, 0, 2, 1, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "the one I am enthusiastic about today is Mergiraf: https://codeberg.org/mergiraf/mergiraf", "kind": "", "icon": true, "domain": "mergiraf.org", "github_repo": null, "official_url": "https://mergiraf.org", "pricing": "", "aliases": ["Mergiraf", "mergiraf"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 782449120, "item_id": 48903070, "url": "https://news.ycombinator.com/item?id=48903070", "by": "NateEag", "date": "2026-07-13", "version": null, "stance": "recommend", "quote": "Don't forget mergiraf, for tree-sitter-based conflict resolution", "excerpt": "Don't forget mergiraf, for tree-sitter-based conflict resolution: https://mergiraf.org/", "context": "", "use_case": "resolve git merge conflicts", "switched_from": "", "story": "The Git history command deserves more attention"}, {"id": 777140321, "item_id": 48571270, "url": "https://news.ycombinator.com/item?id=48571270", "by": "simcop2387", "date": "2026-06-17", "version": null, "stance": "recommend", "quote": "an example for the merge stuff I couldn't find while typing before", "excerpt": "The five command part isn't really possible but you can use custom diffs for merges, git diff, etc. pretty easily. There are projects like diffsitter ( https://github.com/afnanenayet/diffsitter ) for doing more intelligent diffs like this for supported languages. EDIT: and then an example for the merge stuff I couldn't find while typing before: https://mergiraf.org/ and HN discussion a few years ago: https://news.yco", "context": "", "use_case": "AST-aware merge driver", "switched_from": "", "story": "Epic Games announces Lore version control system"}, {"id": 776395968, "item_id": 48524748, "url": "https://news.ycombinator.com/item?id=48524748", "by": "csomar", "date": "2026-06-13", "version": null, "stance": "recommend", "quote": "recently added a mergiraf integration", "excerpt": "I'm working on an online diff tool (https://codeinput.com/products/merge-conflicts) and recently added a mergiraf integration. Basically, the tool loads your git merge but uses mergiraf as the resolution driver. Then add these auto-resolved files to the editor instead of auto-resolving directly. I also tried out weave, but apart from TypeScript, I haven't found any cases where it actually outperforms mergiraf (I run ", "context": "", "use_case": "structural merge conflict resolution", "switched_from": "", "story": "Weave: Merging based on language structure and not lines"}, {"id": 763498817, "item_id": 47718676, "url": "https://news.ycombinator.com/item?id=47718676", "by": "IshKebab", "date": "2026-04-10", "version": null, "stance": "recommend", "quote": "There are a number of projects to improve this like Mergiraf", "excerpt": "> It seems like everyone that hold this opinion want Git to be some magical tool that will guess their intent and automatically resolve the conflict. Absolutely not. There are plenty of fairly trivial solutions where Git's default merge algorithm gives you horrible diffs. Even for cases as simple as adding a function to a file it will get confused and put closing brackets in different parts of the diff. Nobody is ask", "context": "", "use_case": "Better merge conflict resolution", "switched_from": "", "story": "We've raised $17M to build what comes after Git"}, {"id": 759748352, "item_id": 47484272, "url": "https://news.ycombinator.com/item?id=47484272", "by": "csomar", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "the one I am enthusiastic about today is Mergiraf: https://codeberg.org/mergiraf/mergiraf", "excerpt": "I am working on merge conflicts tool[1], so this area is of interest to me. But I fail to see the points of the author. In the first example he gave, git will actually give you three blobs: our, their and ancestor. The ancestor should have the missing information from his example and using code diffs[2], you can see what happened at each blob. Essentially, his blob is a single view of the 3 blobs merged together. Cou", "context": "", "use_case": "Merge conflict resolution", "switched_from": "", "story": "A Coherent Vision for the Future of Version Control"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 755881793, "item_id": 47242612, "url": "https://news.ycombinator.com/item?id=47242612", "by": "keysersoze33", "date": "2026-03-03", "version": null, "stance": "warn", "quote": "Sadly neither support bash out of the box, which makes me suspect that classic merge is better in this/some cases", "excerpt": "Interesting that Weave tries to solve Mergiref's shortcomings (also Tree-sitter based): > git merges lines. mergiraf merges tree nodes. weave merges entities. [1] I've been using mergiraf for ~6 months and tried to use it to resolve a conflict from multiple Claude instances editing a large bash script. Sadly neither support bash out of the box, which makes me suspect that classic merge is better in this/some cases...", "context": "", "use_case": "language-aware merge", "switched_from": "", "story": "Weave \u2013 A language aware merge algorithm based on entities"}]}], "who": [], "tags": [], "use_cases": ["merge conflict resolution", "resolve git merge conflicts", "ast-aware merge driver", "structural merge conflict resolution", "structural merge driver", "better merge conflict resolution"], "compared": [{"slug": "weave", "name": "Weave", "co": 4, "switched_from": 0, "switched_to": 0}, {"slug": "git", "name": "Git", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=48523705", "title": "Weave: Merging based on language structure and not lines", "mentions": 3}, {"url": "https://news.ycombinator.com/item?id=47241976", "title": "Weave \u2013 A language aware merge algorithm based on entities", "mentions": 3}, {"url": "https://news.ycombinator.com/item?id=47478401", "title": "A Coherent Vision for the Future of Version Control", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=48901010", "title": "The Git history command deserves more attention", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=48571081", "title": "Epic Games announces Lore version control system", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47712656", "title": "We've raised $17M to build what comes after Git", "mentions": 1}], "sentiment_by_month": {"2025-11": {"recommend": 1}, "2025-12": {}, "2026-01": {}, "2026-02": {}, "2026-03": {"warn": 1, "recommend": 4, "neutral": 1}, "2026-04": {"recommend": 1}, "2026-05": {}, "2026-06": {"neutral": 1, "compare": 1, "recommend": 2}, "2026-07": {"recommend": 1}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 782449120, "item_id": 48903070, "url": "https://news.ycombinator.com/item?id=48903070", "by": "NateEag", "date": "2026-07-13", "version": null, "stance": "recommend", "quote": "Don't forget mergiraf, for tree-sitter-based conflict resolution", "excerpt": "Don't forget mergiraf, for tree-sitter-based conflict resolution: https://mergiraf.org/", "context": "", "use_case": "resolve git merge conflicts", "switched_from": "", "story": "The Git history command deserves more attention"}, {"id": 777140321, "item_id": 48571270, "url": "https://news.ycombinator.com/item?id=48571270", "by": "simcop2387", "date": "2026-06-17", "version": null, "stance": "recommend", "quote": "an example for the merge stuff I couldn't find while typing before", "excerpt": "The five command part isn't really possible but you can use custom diffs for merges, git diff, etc. pretty easily. There are projects like diffsitter ( https://github.com/afnanenayet/diffsitter ) for doing more intelligent diffs like this for supported languages. EDIT: and then an example for the merge stuff I couldn't find while typing before: https://mergiraf.org/ and HN discussion a few years ago: https://news.yco", "context": "", "use_case": "AST-aware merge driver", "switched_from": "", "story": "Epic Games announces Lore version control system"}, {"id": 776395968, "item_id": 48524748, "url": "https://news.ycombinator.com/item?id=48524748", "by": "csomar", "date": "2026-06-13", "version": null, "stance": "recommend", "quote": "recently added a mergiraf integration", "excerpt": "I'm working on an online diff tool (https://codeinput.com/products/merge-conflicts) and recently added a mergiraf integration. Basically, the tool loads your git merge but uses mergiraf as the resolution driver. Then add these auto-resolved files to the editor instead of auto-resolving directly. I also tried out weave, but apart from TypeScript, I haven't found any cases where it actually outperforms mergiraf (I run ", "context": "", "use_case": "structural merge conflict resolution", "switched_from": "", "story": "Weave: Merging based on language structure and not lines"}, {"id": 776392801, "item_id": 48524550, "url": "https://news.ycombinator.com/item?id=48524550", "by": "rapnie", "date": "2026-06-13", "version": null, "stance": "compare", "quote": "", "excerpt": "There's a benchmark on the site that compares with mergiraf. https://ataraxy-labs.github.io/weave/benchmarks.html", "context": "", "use_case": "", "switched_from": "", "story": "Weave: Merging based on language structure and not lines"}, {"id": 776392160, "item_id": 48524510, "url": "https://news.ycombinator.com/item?id=48524510", "by": "psYchotic", "date": "2026-06-13", "version": null, "stance": "neutral", "quote": "it sounds similar to Mergiraf", "excerpt": "Without having looked into how Weave works, it sounds similar to Mergiraf: https://mergiraf.org/", "context": "", "use_case": "structural merge driver", "switched_from": "", "story": "Weave: Merging based on language structure and not lines"}, {"id": 763498817, "item_id": 47718676, "url": "https://news.ycombinator.com/item?id=47718676", "by": "IshKebab", "date": "2026-04-10", "version": null, "stance": "recommend", "quote": "There are a number of projects to improve this like Mergiraf", "excerpt": "> It seems like everyone that hold this opinion want Git to be some magical tool that will guess their intent and automatically resolve the conflict. Absolutely not. There are plenty of fairly trivial solutions where Git's default merge algorithm gives you horrible diffs. Even for cases as simple as adding a function to a file it will get confused and put closing brackets in different parts of the diff. Nobody is ask", "context": "", "use_case": "Better merge conflict resolution", "switched_from": "", "story": "We've raised $17M to build what comes after Git"}, {"id": 759748352, "item_id": 47484272, "url": "https://news.ycombinator.com/item?id=47484272", "by": "csomar", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "the one I am enthusiastic about today is Mergiraf: https://codeberg.org/mergiraf/mergiraf", "excerpt": "I am working on merge conflicts tool[1], so this area is of interest to me. But I fail to see the points of the author. In the first example he gave, git will actually give you three blobs: our, their and ancestor. The ancestor should have the missing information from his example and using code diffs[2], you can see what happened at each blob. Essentially, his blob is a single view of the 3 blobs merged together. Cou", "context": "", "use_case": "Merge conflict resolution", "switched_from": "", "story": "A Coherent Vision for the Future of Version Control"}, {"id": 759743632, "item_id": 47483977, "url": "https://news.ycombinator.com/item?id=47483977", "by": "suralind", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "", "excerpt": "Guys, there\u2019s a tool called mergiraf[1] that does wonders. I don\u2019t remember my last rebase [1]: https://mergiraf.org/", "context": "", "use_case": "", "switched_from": "", "story": "A Coherent Vision for the Future of Version Control"}, {"id": 756874864, "item_id": 47304679, "url": "https://news.ycombinator.com/item?id=47304679", "by": "mtndew4brkfst", "date": "2026-03-08", "version": null, "stance": "recommend", "quote": "I find Mergiraf pretty pleasant to use and frequently pretty helpful as a time-saver.", "excerpt": "I find Mergiraf pretty pleasant to use and frequently pretty helpful as a time-saver. Handles TOML and Rust for me, and I have way fewer manual interventions, especially after supplementing it with rustfmt rules to not do a bunch of merged use statements in one go. Easy to configure as a jujutsu tool as well. https://mergiraf.org/", "context": "", "use_case": "Syntax-aware merge driver", "switched_from": "", "story": "Beagle, a source code management system that stores AST trees"}, {"id": 756003376, "item_id": 47250211, "url": "https://news.ycombinator.com/item?id=47250211", "by": "bigcojosh", "date": "2026-03-04", "version": null, "stance": "neutral", "quote": "mergiraf is already supported for windows", "excerpt": "that's pretty cool, thank you worth mentioning that mergiraf is already supported for windows. from https://github.com/Ataraxy-Labs/weave/issues/7 it looks like it's planned for weave too at some point?", "context": "", "use_case": "", "switched_from": "", "story": "Weave \u2013 A language aware merge algorithm based on entities"}, {"id": 755905856, "item_id": 47244116, "url": "https://news.ycombinator.com/item?id=47244116", "by": "_flux", "date": "2026-03-03", "version": null, "stance": "recommend", "quote": "I've had good experience with it so far", "excerpt": "How does it compare to https://mergiraf.org/ ? I've had good experience with it so far, although I rarely even need it. It's also based on treesitter, but probably otherwise a more baseline algorithm. I wonder if that \"entity-awareness\" actually then brings something to the table in addition to the AST. edit: man, I tried searching this thread for mention of the tool for a few times, but apparently its name is not me", "context": "", "use_case": "Merge conflict resolution", "switched_from": "", "story": "Weave \u2013 A language aware merge algorithm based on entities"}, {"id": 755881793, "item_id": 47242612, "url": "https://news.ycombinator.com/item?id=47242612", "by": "keysersoze33", "date": "2026-03-03", "version": null, "stance": "warn", "quote": "Sadly neither support bash out of the box, which makes me suspect that classic merge is better in this/some cases", "excerpt": "Interesting that Weave tries to solve Mergiref's shortcomings (also Tree-sitter based): > git merges lines. mergiraf merges tree nodes. weave merges entities. [1] I've been using mergiraf for ~6 months and tried to use it to resolve a conflict from multiple Claude instances editing a large bash script. Sadly neither support bash out of the box, which makes me suspect that classic merge is better in this/some cases...", "context": "", "use_case": "language-aware merge", "switched_from": "", "story": "Weave \u2013 A language aware merge algorithm based on entities"}, {"id": 734569329, "item_id": 45910583, "url": "https://news.ycombinator.com/item?id=45910583", "by": "mnemonet", "date": "2025-11-12", "version": null, "stance": "recommend", "quote": "This is a very interesting idea that could save a lot of time and pain in big projects.", "excerpt": "This is a very interesting idea that could save a lot of time and pain in big projects. The example shown reminds me pf Zed's CRDTs [1], and their journey to build a fine-grained version control system for agentic development [2]\u2014I imagine this work could prove useful to the Zed/Cursor team, and likely shares a lot of functionality with DeltaDB [2]. - [1]: https://zed.dev/blog/crdts - [2]: https://zed.dev/blog/sequoi", "context": "", "use_case": "", "switched_from": "", "story": "Mergiraf: Syntax-Aware Merging for Git"}]}