reachable: use traverse_commit_list instead of custom walk