Recursively peel an object until an object of the specified type is met.
If the query cannot be satisfied due to the object model, GIT_EINVALIDSPEC will be returned (e.g. trying to peel a blob to a tree).
If you pass GIT_OBJ_ANY
as the target type, then the object will
be peeled until the type changes. A tag will be peeled until the
referenced object is no longer a tag, and a commit will be peeled
to a tree. Any other object type will return GIT_EINVALIDSPEC.
If peeling a tag we discover an object which cannot be peeled to the target type due to the object model, GIT_EPEEL will be returned.
You must free the returned object.
0 on success, GIT_EINVALIDSPEC, GIT_EPEEL, or an error code