Visual Git does not invent a picture of your repository. It reads the real
thing — the objects and references Git itself stores in the
.git folder — and draws exactly what is there.
Every repository has a hidden .git folder, and almost
everything Git knows is stored inside it. Your entire history, every
version of every file, every branch and tag — all of it sits in
there as ordinary files on disk.
Most tools hide this from you and show a tidy list of commits instead. Visual Git opens it up and shows you the actual contents, because once you can see the shape of it, commands like rebase and reset stop being mysterious.
objects/ every version of everything refs/ ├── heads/ your branches └── tags/ your tags HEAD where you are right now index the staging area
The object folder holds thousands of files, but they are only ever one of a handful of types. Each one gets its own colour on the canvas.
The interesting moments in Git are often the in‑between ones. When you stage a file, Git writes a blob straight away — before any commit exists. Visual Git picks these up and shows them floating there, unattached, waiting.
The same goes for objects left behind by a reset or an amended commit. They are still on disk, no longer reachable from any branch, and you can watch them sit there until Git eventually cleans them up.
Alongside the graph, panels show your working directory and staging area, so you can see a change move from one to the other as you type.
If you use worktrees to keep several branches checked out at once, they share a single object store between them — one history, several working folders.
Visual Git understands this arrangement and shows each worktree along with the branch it has checked out, so you can see how they sit against the shared history.
Earlier versions of Visual Git uploaded a snapshot of your repository to the cloud so that a website could draw it. That is gone. Everything now happens inside the desktop app: your repository is read on your machine, drawn on your machine, and never sent anywhere. The only thing the app sends is an anonymous count of how often it is used, which contains no file names, no history and no code.