Git inside: Direct work with git objects
Goals
- Explore the structure of the database objects
- Using SHA1 hashes for searching the content in repository
Let us examine git objects with some tools.
01. Searching for the last commit
RUN:
| 1 | git hist –max-count=1 |
This command should find the last commit in the repository. SHA1 hash is probably different on our systems; however you should see something like this.
RESULT:
| 1 2 | $ git hist –max-count=1 * 8029c07 2011-03-09 | Added index.html. (HEAD, master) [Alexander Shvets] |
02. Display of the last commit
With SHA1 hash of a commit, as above…
RUN:
| 1 2 | git cat-file -t <hash> git cat-file -p <hash> |
I see this …
RESULT:
| 1 2 3 4 5 6 7 8 9 | $ git cat-file -t 8029c07 commit $ git cat-file -p 8029c07 tree 096b74c56bfc6b40e754fc0725b8c70b2038b91e parent 567948ac55daa723807c0c16e34c76797efbcbed author Alexander Shvets <alex@githowto.com> 1299684476 -0500 committer Alexander Shvets <alex@githowto.com> 1299684476 -0500 Added index.html. |
Note:
If you specify the alias as «type» and «dump», as described in the corresponding lesson, you can enter commands git type and git dump instead of a long command (which I never memorize).
This displays the commit object, which is in the head of master branch.
03. Tree search
We can display the tree referenced in the commit. This should be a file description (top level) in our project (for a specific commit). Use the SHA1 hash of the tree string from the list above.
RUN:
| 1 | git cat-file -p <treehash> |
Here is my tree …
RESULT:
| 1 2 3 | $ git cat-file -p 096b74c 100644 blob 28e0e9d6ea7e25f35ec64a43f569b550e8386f90 index.html 040000 tree e46f374f5b36c6f02fb3e9e922b79044f754d795 lib |
I can see the index.html file and lib folder.
04. Display lib directory
RUN:
| 1 | git cat-file -p <libhash> |
RESULT:
| 1 2 | $ git cat-file -p e46f374 100644 blob c45f26b6fdc7db6ba779fc4c385d9d24fc12cf72 hello.html |
There is a hello.html file.
05. Display hello.html file
RUN:
| 1 | git cat-file -p <hellohash> |
RESULT:
| 1 2 3 4 5 6 7 8 9 | $ git cat-file -p c45f26b <!– Author: Alexander Shvets (alex@githowto.com) –> <html> <head> </head> <body> <h1>Hello, World!</h1> </body> </html> |
And there it is. Tree objects, commit objects and blob objects are displayed directly from the git repository. That’s all there is – trees, blobs and commits.
06. Explore by yourself
The git repository can be explored manually. Try to manually find the original hello.html file from the first commit with help of SHA1 hash references in the last commit.
I’m Rajesh Kumar, a DevOps, SRE, DevSecOps, Cloud, and Platform Engineering expert passionate about sharing practical knowledge, real-world experiences, and industry best practices. I have worked at Cotocus and regularly write about technology, travel, investing, health, product reviews, and digital marketing through my various platforms.
I publish technical articles at DevOps School, travel stories at Holiday Landmark, stock market insights at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at TrueReviewNow, and SEO and digital marketing strategies at Wizbrand.
Find Trusted Cardiac Hospitals
Compare heart hospitals by city and services — all in one place.
Explore Hospitals
Good explanation of how Git objects work under the hood, especially how commits, trees, and blobs connect through SHA hashes. One thing worth adding is that in real-world CI/CD pipelines or large monorepos, manually inspecting objects with
git cat-filebecomes less practical because objects are often packed, partially fetched, or missing in shallow clones. In those cases, debugging usually shifts toward higher-level tools (git log,git show, or CI artifacts) rather than raw object traversal.