On Sat, Mar 17, 2018 at 04:01:28PM +0300, Konstantin Khomoutov wrote: > So actually a generic approach to what you need is a full scan of all > the commits in the repository with recursive traversing of the hierarchy > of trees of each of them (via `git ls-tree`) and looking for the SHA-1 > name of the reference tree object. As you can see, this is not going to > be fast on repos of realistic size. If you assume that the tree is a root tree (which is by no means certain, but a good guess), it's not _too_ bad to do: git rev-list --all --format='%T %H' | grep ^$desired_tree That's linear in the number of commits, but still takes only about 7 seconds on linux.git. If you want to dig further, you can use the diff machinery to show which commit introduced a particular tree, like: git rev-list --all | git diff-tree --stdin --pretty=raw --raw -t -r | less +/$desired_tree That "less" will find the mentioned tree, and then you'll have to manually read the commit. It would be possible to do it mechanically with a short perl script, but I'll leave that as an exercise for the reader. -Peff