i implemented optimizations that seemed to work well. the big remaining one is the enumeration of commits at the start. i started debugging it, but ran into issues again. i might need either a local build of gdb or some more carefulness or something: Breakpoint 1, repo_commits::repo_commits (path=, this=) at process2.cpp:75 75 auto revwalk = repository.create_revwalk(); (gdb) s main (argc=2, argv=0x7fffffffe2e8) at process2.cpp:787 787 possible_conflicts = repository.merge_commits(commit.parent(0), commit.parent(1)); the source line it's on keeps jumping around, epecially in the area i want to debug. most recently it seemed gdb typed a bunch of things in on its own, completely changing where it was and what it was doing. meanwhile my system has begun responding at a snails pace, this email taking minutes to slowly process each letter.