DEV Community

Ris Adams
Ris Adams

Posted on • Originally published at risadams.com on

What's in a .git? A Deep Dive into Git's Hidden Engine

Ever wonder what Git does behind the scenes when you run git commit or git push? That mysterious .git folder holds all the magic—it's Git's brain, memory, and filing system rolled into one. Today we're cracking it open to see how Git really works under the hood.

The .git Folder: Git's Mission Control

When you run git init, Git creates a .git folder that becomes the nerve center of your repository. This isn't just storage—it's a sophisticated database that tracks every change, branch, and piece of metadata about your project.

Here's what a typical .git folder looks like:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
.git/:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── HEAD # Points to current branch/commit:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── config # Repository configuration:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── description # Repository description (used by GitWeb):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── index # Staging area (binary file):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── packed-refs # Packed references for efficiency:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── hooks/ # Git hook scripts:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── pre-commit.sample:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── post-commit.sample:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── pre-push.sample:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ └── ...:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── info/ # Repository metadata:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── exclude # Local ignore patterns:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ └── refs # Reference namespace info:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── logs/ # Reference history logs:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── HEAD # HEAD movement history (reflog):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ └── refs/:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── heads/ # Branch movement logs:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ └── remotes/ # Remote branch logs:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── objects/ # Git's object database:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── 01/ # Objects with hash starting "01...":where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── 02/ # Objects with hash starting "02...":where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── ... # More hash directories (00-ff):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── info/ # Object database info:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ └── pack/ # Packed objects for efficiency:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── pack-*.idx # Pack index files:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ └── pack-*.pack # Packed object files:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── refs/ # References (pointers to commits):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── heads/ # Local branches:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ │ ├── main # Main branch pointer:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ │ ├── develop # Develop branch pointer:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ │ └── feature-* # Feature branch pointers:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── remotes/ # Remote tracking branches:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ │ └── origin/:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ │ ├── main # Origin's main branch:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ │ └── develop # Origin's develop branch:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ └── tags/ # Tag references:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ ├── v1.0.0 # Version tags:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ └── v1.1.0:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
└── branches/ # Legacy branch storage (rarely used)
Enter fullscreen mode Exit fullscreen mode

Let's explore each component and understand what makes Git tick.

Meet Your New Best Friend: cat-file

Before we dive deep, you need to know about git cat-file—your Swiss Army knife for exploring Git's internals. This command lets you peek inside Git objects and understand what's really happening under the hood.

Here are the essential options you'll use:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Show the type of an object (blob, tree, commit, tag):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file -t <object-hash>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Show the content of an object (pretty-printed):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file -p <object-hash>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Show the size of an object in bytes:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file -s <object-hash>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Check if an object exists (returns nothing if valid):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file -e <object-hash>
Enter fullscreen mode Exit fullscreen mode

tip

You don't need the full SHA-1 hash—Git accepts shortened versions as long as they're unambiguous. Usually 4-6 characters work fine:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# These are equivalent (if the short hash is unique):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file -p a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file -p a1b2
Enter fullscreen mode Exit fullscreen mode

You'll see git cat-file throughout this article—it's how we'll explore every corner of Git's object database.

Objects: Git's Content Database

The objects/ folder is where Git stores all your content. Everything—files, directories, commits, tags—becomes an object with a unique SHA-1 hash.

The Four Types of Git Objects

Blob Objects: Your File Content

Blobs store the actual content of your files. Here's how to peek inside:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Find a blob object:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git ls-tree HEAD | head -1:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Example output: 100644 blob a1b2c3d4... README.md:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# View the blob content:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file -p a1b2c3d4
Enter fullscreen mode Exit fullscreen mode

Tree Objects: Directory Structure

Trees represent directories and link to blobs and other trees:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# View a tree object:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file -p HEAD^{tree}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Example output::where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# 100644 blob a1b2c3d4... README.md:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# 040000 tree b2c3d4e5... src:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# 100644 blob c3d4e5f6... package.json
Enter fullscreen mode Exit fullscreen mode

Commit Objects: Snapshots in Time

Commits tie everything together with metadata:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# View a commit object:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file -p HEAD:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Example output::where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# tree a1b2c3d4e5f6...:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# parent b2c3d4e5f6a1...:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# author Ris Adams <email> 1640995200 -0500:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# committer Ris Adams <email> 1640995200 -0500:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
#:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Add user authentication feature
Enter fullscreen mode Exit fullscreen mode

Object Storage Deep Dive

Git uses a clever storage system. Objects are stored in subdirectories based on the first two characters of their SHA-1 hash:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
objects/:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── a1/:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ └── b2c3d4e5f6... (full hash: a1b2c3d4e5f6...):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
├── b2/:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
│ └── c3d4e5f6a1...:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
└── pack/ (compressed object packs):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    ├── pack-abc123.idx:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    └── pack-abc123.pack
Enter fullscreen mode Exit fullscreen mode

You can explore this yourself:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# List object directories:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
Get-ChildItem .git\objects | Where-Object { $_.Name.Length -eq 2 }:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Find all objects:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
Get-ChildItem .git\objects -Recurse -File | Measure-Object
Enter fullscreen mode Exit fullscreen mode

References: Git's Pointer System

The refs/ folder contains all the pointers that make Git navigation possible.

Branch References (refs/heads/)

Each file in refs/heads/ represents a branch and contains the SHA-1 of the latest commit:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# View the main branch reference:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
cat .git/refs/heads/main:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Output: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# This is equivalent to:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git rev-parse main
Enter fullscreen mode Exit fullscreen mode

Remote References (refs/remotes/)

These track the state of branches on remote repositories:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# View remote branch state:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
cat .git/refs/remotes/origin/main:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# See all remote references:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git branch -r
Enter fullscreen mode Exit fullscreen mode

Tags (refs/tags/)

Tags point to specific commits (or tag objects for annotated tags):

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Lightweight tag (points directly to commit):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
cat .git/refs/tags/v1.0.0:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Annotated tag (points to tag object):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file -t $(cat .git/refs/tags/v1.1.0) # outputs "tag":where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file -p $(cat .git/refs/tags/v1.1.0) # shows tag metadata
Enter fullscreen mode Exit fullscreen mode

HEAD: Your Current Location

The HEAD file tells Git where you are right now:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Typical HEAD content (on a branch):where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
cat .git/HEAD:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Output: ref: refs/heads/main:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# During detached HEAD state:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Output: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2
Enter fullscreen mode Exit fullscreen mode

The Index: Git's Staging Area

The index file (also called the staging area) is where Git prepares your next commit:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# View what's staged:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git ls-files --stage:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Example output::where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# 100644 a1b2c3d4... 0 README.md:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# 100644 b2c3d4e5... 0 src/main.js:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# 100644 c3d4e5f6... 0 package.json
Enter fullscreen mode Exit fullscreen mode

The index contains:

.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}

  • File mode (permissions)
  • SHA-1 hash of the blob
  • Stage number (0 for normal, 1-3 for merge conflicts)
  • File path

Logs: Git's Memory

The logs/ folder keeps a history of where your references have pointed:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# View HEAD's movement history:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git reflog:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Equivalent to: cat .git/logs/HEAD:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# View branch history:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
cat .git/logs/refs/heads/main
Enter fullscreen mode Exit fullscreen mode

Each log entry shows:

.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}

  • Previous SHA-1
  • New SHA-1
  • Author and timestamp
  • Action description html:not([data-theme=dark]) .code-block-container:before{content:&quot;&quot;;opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:&quot;&quot;;opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
a1b2c3d4 b2c3d4e5 Ris Adams <email> 1640995200 -0500 commit: Add feature:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
b2c3d4e5 c3d4e5f6 Ris Adams <email> 1640995260 -0500 checkout: moving from main to feature-branch
Enter fullscreen mode Exit fullscreen mode

Configuration: Git's Settings

The config file stores repository-specific settings:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# View local config:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
cat .git/config:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Example content::where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
[core]:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    repositoryformatversion = 0:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    filemode = true:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    bare = false:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    logallrefupdates = true:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
[remote "origin"]:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    url = https://github.com/user/repo.git:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    fetch = +refs/heads/*:refs/remotes/origin/*:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
[branch "main"]:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    remote = origin:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    merge = refs/heads/main
Enter fullscreen mode Exit fullscreen mode

Hooks: Git's Automation System

The hooks/ folder contains scripts that run at specific Git events:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# List available hooks:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
ls .git/hooks/:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Common hooks::where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# pre-commit - Runs before commits:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# post-commit - Runs after commits:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# pre-push - Runs before pushes:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# post-receive - Runs on the server after receiving pushes
Enter fullscreen mode Exit fullscreen mode

Here's a simple pre-commit hook to run tests:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# .git/hooks/pre-commit:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
echo "Running tests before commit...":where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
npm test:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
if [$? -ne 0]; then:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    echo "Tests failed. Commit aborted.":where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
    exit 1:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
fi
Enter fullscreen mode Exit fullscreen mode

Practical Git Internals Commands

Here's your toolkit for exploring Git internals:

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Object inspection:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git cat-file <option> <sha1> # Inspect an object:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Repository exploration:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git count-objects # Count loose objects:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git verify-pack -v .git/objects/pack/*.idx # Examine pack files:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git fsck # Verify repository integrity:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Reference management:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git update-ref refs/heads/test-branch <sha1> # Create/update reference:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git symbolic-ref HEAD refs/heads/main # Update symbolic reference:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Index manipulation:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git ls-files --stage # Show staged files:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git update-index --add <file> # Add file to index manually
Enter fullscreen mode Exit fullscreen mode

When Git Internals Knowledge Pays Off

Understanding Git's internals helps in several scenarios:

Repository Corruption Recovery

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Find dangling objects:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git fsck --unreachable:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Recover lost commits:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git reflog expire --expire-unreachable=now --all:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git gc --prune=now
Enter fullscreen mode Exit fullscreen mode

Performance Optimization

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Repack objects for better performance:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git gc --aggressive:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Check repository size:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
git count-objects -vH
Enter fullscreen mode Exit fullscreen mode

Advanced Debugging

html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}

:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
# Trace Git's decision-making:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
GIT_TRACE=1 git status:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}
GIT_TRACE_PACK_ACCESS=1 git log --oneline -5
Enter fullscreen mode Exit fullscreen mode

Key Takeaways

.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}

  • The .git folder is a complete database that tracks everything about your project
  • Objects store all content using SHA-1 hashes for integrity
  • References provide human-readable names for commits
  • The index bridges your working directory and repository
  • Understanding internals helps with troubleshooting and advanced Git operations

Going Deeper

Want to explore more? Try building a simple Git implementation or dive into the Git source code. The more you understand Git's internals, the more confident you'll become with complex operations like rebasing, cherry-picking, and repository maintenance.

Next time you run git status, you'll know exactly what Git is checking behind the scenes—and that's pretty powerful knowledge to have in your toolkit.

Top comments (0)