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)
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>
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
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
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
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
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
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
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
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
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
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
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
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
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:"";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}
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
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
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
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
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
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
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
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
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)