I can almost get a depth first ordering with git rev-list --in-commit-order --objects --reverse HEAD
which gives me something like
commit A
tree AA
blob A
blob B
commit B
tree BA
...
When I want
blob B
blob A
tree AA
commit A
...
Post processing the list to depth first isn't straight forward because two trees of common ancestry might share the same child like
tree A is parent of tree B and blob A
tree B is parent of blob A