I don't think we should use a copy here.  We should follow what RevWalk does which is to iterate exactly once, and provide an Iterator API only to provide a brain-dead simple use case.  If you need multiple traversals you should buffer the results yourself.