Your visual Git course

Git, one skribble at a time.

102 skribbles · 30 free · 12 modules

Git as a time machine you can watch: every command drawn on one timeline, from your first commit to rescuing lost work and merging with a team.

Explore the free skribbles

Unlock every Git skribble and video: one purchase, yours to keep.

$99$79 USD

Where Your Work Lives

You Already Do Version Control

You Already Do Version Control

Hand-named copies feel like history, but lose the thread between versions.

beginnerFree
Git: A Time Machine for a Folder

Git: A Time Machine for a Folder

what you actually want: cheap save points, a note on each, instant travel or comparison between any two moments

beginnerFree
What Git Is (and Is Not)

What Git Is (and Is Not)

a program on your machine keeping a repository inside your folder - not a website, no account needed

beginnerFree
Getting Git Onto Your Machine

Getting Git Onto Your Machine

one install, one version check, one introduction - then the tool disappears into your folder

beginnerFree
Snapshots, not diffs

Snapshots, not diffs

git shows diffs all day - so you assume it stores them. It doesn't.

beginnerFree
The Verbs You Will Keep Using
🔒

The Verbs You Will Keep Using

twelve everyday commands - meet their names now, master each when its module comes

beginnerPremium
A Commit Holds Your Whole Folder
🔒

A Commit Holds Your Whole Folder

every dot on the history line is a full snapshot of every tracked file - watch the folder change, commit by commit

beginnerPremium
One File, Three Moments
🔒

One File, Three Moments

ask each commit for pasta.md: it answers with the whole file as it was - or says it was not there yet

beginnerPremium
Git's Three Areas

Git's Three Areas

five files edited, two different truths - the NEXT save needs a place to be assembled before it is sealed

beginnerFree
What a Commit Really Is

What a Commit Really Is

one small record: a pointer to a snapshot, a note, and its parent - its id is a fingerprint of all of it

beginnerFree
History Is a Graph

History Is a Graph

each commit points at its parent(s) - those links are the ancestry git keeps

beginnerFree
Where Your Work Lives

Where Your Work Lives

the three places your work lives - and the seal that makes a moment permanent

beginnerFree
Beads on a Thread

Beads on a Thread

every commit records its parent - that chain is the history you walk

beginnerFree

Inside .git: the Object Store

The Daily Loop

A Timeline Is Born

A Timeline Is Born

git init builds the archive - but the rail is born with the FIRST commit

beginnerFree
git init & git clone - Two Ways to Get a Repository
🔒

git init & git clone - Two Ways to Get a Repository

init starts version control in a folder you already have; clone copies an existing project onto your machine - history and all

beginnerPremium
git add & git commit - Saving in Two Steps

git add & git commit - Saving in Two Steps

add chooses exactly what goes into the next commit; commit seals it with a message - the two-step is the whole point

beginnerFree
git status - What Differs, and Where
🔒

git status - What Differs, and Where

the read-only report: which files differ across working directory, staging area, and last commit

beginnerPremium
git add -p, -A, and . - Choosing What You Stage
🔒

git add -p, -A, and . - Choosing What You Stage

-p stages chosen hunks of one file; -A stages everything repo-wide, deletions included; . reaches this folder down

beginnerPremium
git commit -m and -a - The Sealing Controls
🔒

git commit -m and -a - The Sealing Controls

-m writes the message inline; -a stages every TRACKED edit as it commits - and quietly skips anything untracked

beginnerPremium
git diff - Three Comparisons, One Command
🔒

git diff - Three Comparisons, One Command

plain: working directory vs staging area. --staged: staging area vs last commit. HEAD: working directory vs last commit.

beginnerPremium
git log - Walking History, Three Lenses
🔒

git log - Walking History, Three Lenses

log walks parent pointers backward from where you stand - --all adds every starting ref; --graph draws the shape

beginnerPremium
git show - One Commit Under the Lamp
🔒

git show - One Commit Under the Lamp

one commit, three lenses: the full patch, the file summary, and the X-ray of its bare record

beginnerPremium
.gitignore - Telling Git What to Leave Alone
🔒

.gitignore - Telling Git What to Leave Alone

patterns git leaves untracked by default - and why the list does nothing to files already committed

beginnerPremium
git commit --amend - Redo the Last Commit
🔒

git commit --amend - Redo the Last Commit

fix the last commit - the result is a NEW commit with a NEW id; keep it to work you haven't shared

beginnerPremium
The Daily Loop

The Daily Loop

edit, stage, commit - the loop you will run a thousand times, walked slowly once

beginnerFree
Reading Your Repository

Reading Your Repository

status, diff, and log - the three commands that only look, never change

beginnerFree

Undo Without Fear

Timelines

git branch & git switch: Name First, Move Second
🔒

git branch & git switch: Name First, Move Second

a new branch is just a second name on your commit - switch is what moves you, and it refuses to lose edits

beginnerPremium
git switch -c and --detach: Two Ways to Move
🔒

git switch -c and --detach: Two Ways to Move

-c creates the branch and moves in one motion; --detach visits a commit with no branch at all

beginnerPremium
git checkout: The Old Master Key
🔒

git checkout: The Old Master Key

one legacy word doing two different jobs - read it by its ARGUMENT

beginnerPremium
Fast-forward: The Merge With No Merge Commit
🔒

Fast-forward: The Merge With No Merge Commit

when the other branch continued your line, merge creates nothing - your branch name slides forward to their tip

beginnerPremium
The Three-Way Merge: One Commit, Two Parents
🔒

The Three-Way Merge: One Commit, Two Parents

one line splits, both sides work, git reunites them through the shared base - the whole story on one line

beginnerPremium
git log Prints a List. History Is a Graph.
🔒

git log Prints a List. History Is a Graph.

a merge never moves commits onto one line - each keeps its parents; git log just flattens the graph to fit

beginnerPremium
Merge Conflict: Git Asking a Question

Merge Conflict: Git Asking a Question

both branches changed the same lines to different results - git writes both versions into the file and waits for your ruling

beginnerFree
Two Panes Compare, Three Panes Rule
🔒

Two Panes Compare, Three Panes Rule

read any diff window by its pane count - and by one color grammar

beginnerPremium
The Ruling Desk: Both Moved One Line
🔒

The Ruling Desk: Both Moved One Line

your editor's merge view - assemble the middle pane, then seal the ruling

beginnerPremium
Rulings Beyond One Line
🔒

Rulings Beyond One Line

the desk hands you more than same-line edits - every case ends the same way

beginnerPremium
git merge Arguments: -m, --no-ff, --abort
🔒

git merge Arguments: -m, --no-ff, --abort

the message, the deliberate record, and the exit - the three merge switches you will actually use

beginnerPremium
Rebase vs Merge: Two Endings for a Stale Desk
🔒

Rebase vs Merge: Two Endings for a Stale Desk

one scene, two honest endings - merge ties a knot keeping both lines; rebase re-files your commits with NEW ids

beginnerPremium
git rebase --onto: The Transplant
🔒

git rebase --onto: The Transplant

lift a slice of commits off one base and replant it on another - three arguments name the cut

beginnerPremium
Pull Request = Merge Request
🔒

Pull Request = Merge Request

one idea, two names: GitHub says Pull Request, GitLab says Merge Request - same thing, opposite vantage

beginnerPremium
Timelines

Timelines

branching and reuniting - and why the flat printout is a view, not the truth

beginnerFree
How Merging Works

How Merging Works

a real merge weighs three things - and a conflict is the one question git cannot answer

beginnerFree

Remote Repositories

git remote - Naming the Server Copy
🔒

git remote - Naming the Server Copy

your whole archive lives on one laptop - a remote names the second copy where work survives and teammates join

beginnerPremium
git fetch: The Mail Arrives, Held
🔒

git fetch: The Mail Arrives, Held

download their new records into YOUR archive - nothing you stand on moves

beginnerPremium
git fetch vs git pull - Look First, Then File It In
🔒

git fetch vs git pull - Look First, Then File It In

fetch downloads their commits and updates your remote-tracking refs - pull is fetch plus integrating

beginnerPremium
git pull: Fetch, Then File It In
🔒

git pull: Fetch, Then File It In

one command, two acts - the mail arrives AND gets filed into your branch

beginnerPremium
git push - The Refusal Is Protection
🔒

git push - The Refusal Is Protection

push asks the remote to move its branch - the everyday refusal means it holds commits you haven't seen

beginnerPremium
git push --force-with-lease - The Safer Force
🔒

git push --force-with-lease - The Safer Force

overwrite the remote branch ONLY if it still matches your last-known state - safer than --force, not safe in itself

beginnerPremium
The Pull Request Loop - Branch, Push, Review, Merge
🔒

The Pull Request Loop - Branch, Push, Review, Merge

a pull request is a hosted conversation around a pushed branch - every button on it is a graph move you know

beginnerPremium
"Your Branch Is Behind" - Behind and Ahead, Decoded
🔒

"Your Branch Is Behind" - Behind and Ahead, Decoded

behind/ahead compares two LOCAL pointers: your branch vs your bookmark - fresh only as your last fetch

beginnerPremium
Remote Repositories

Remote Repositories

another copy at an address, your bookmarks of it, and the mail rules between

beginnerFree
The Collaboration Loop

The Collaboration Loop

push discipline, the honest rewrite, and the pull request that wraps it all

beginnerFree

The Sharp Tools

Reading a Merge Conflict

The Merge View: Three Panes, One Ruling
🔒

The Merge View: Three Panes, One Ruling

git mergetool hands every tool the same three versions - yours, theirs, and the base both grew from

beginnerPremium
Merge Conflicts Have Shapes
🔒

Merge Conflicts Have Shapes

the CONFLICT line names the shape, the shape names your move - watch one shape ruled end to end

beginnerPremium
Reading Conflict Markers
🔒

Reading Conflict Markers

the <<<<<<< block is not damage - your side and theirs in plain text, and diff3 adds the base as referee

beginnerPremium
Resolving: Four Moves, One Exit Door
🔒

Resolving: Four Moves, One Exit Door

every button in every merge tool is one of four decisions - and git add is the resolved signal, not saving

beginnerPremium
The Rebase Flip: ours Is Not Yours
🔒

The Rebase Flip: ours Is Not Yours

during a rebase --ours is the branch you are rebasing ONTO - grabbing "mine!" keeps the other person's line

beginnerPremium
A Clean Merge Can Still Be Wrong
🔒

A Clean Merge Can Still Be Wrong

git checks text overlap, never meaning - verify the merge by diffing the result against each parent

beginnerPremium
Reverting a Merge: the Dead End
🔒

Reverting a Merge: the Dead End

after you revert a merge, re-merging brings nothing back while the branch has no NEW commits

beginnerPremium
Never Resolve on the Release Line
🔒

Never Resolve on the Release Line

the team rule: cut a temporary integration branch FROM the release branch, resolve the conflict THERE, fast-forward back

beginnerPremium
Reading a Merge Conflict

Reading a Merge Conflict

the stop, the markers, the three panes, the ruling - and the always-open door

beginnerFree
Merging on a Team

Merging on a Team

directions, the release rule, the revert traps, and the verify discipline

beginnerFree

Repository Archaeology

Choosing Your Strategy

One Archive, Many Desks

Reference

Videos

Watch the ideas come together: 19 videos are free to watch, the rest unlock with the course.

1:24

You Already Do Version Control

Free
1:18

Git: A Time Machine for a Folder

Free
1:35

What Git Is (and Is Not)

Free
1:17

Getting Git Onto Your Machine

Free
1:18

Snapshots, not diffs

Free
1:30

The Verbs You Will Keep Using

Premium
1:41

A Commit Holds Your Whole Folder

Premium
1:31

One File, Three Moments

Premium
1:39

Git's Three Areas

Free
1:52

What a Commit Really Is

Free
1:28

History Is a Graph

Free
1:55

Where Your Work Lives

Free
1:40

Beads on a Thread

Free
2:40

The Prompt Shows Where You Stand

Premium
2:02

Blobs, Trees, Commits

Premium
1:32

Content Addressing

Premium
1:29

A Branch Is Just a Name

Free
1:23

HEAD: Where You Are Standing

Premium
2:32

Inside .git: the Object Store

Free
2:47

A Timeline Is Born

Free
1:24

git init & git clone - Two Ways to Get a Repository

Premium
1:08

git add & git commit - Saving in Two Steps

Free
1:06

git status - What Differs, and Where

Premium
1:06

git add -p, -A, and . - Choosing What You Stage

Premium
1:17

git commit -m and -a - The Sealing Controls

Premium
1:13

git diff - Three Comparisons, One Command

Premium
1:17

git log - Walking History, Three Lenses

Premium
1:01

git show - One Commit Under the Lamp

Premium
1:07

.gitignore - Telling Git What to Leave Alone

Premium
1:11

git commit --amend - Redo the Last Commit

Premium
1:57

The Daily Loop

Free
1:26

Reading Your Repository

Free
1:22

git restore - Put a File Back

Premium
1:26

restore --staged & --source

Premium
1:26

git reset - Walk the Branch Back

Premium
1:07

git revert - Undo by Adding

Premium
1:04

The Revert Travels With the Merge

Premium
1:16

git reflog - Where HEAD Has Been

Free
1:09

What Git Can Never Bring Back

Premium
2:12

Undo Without Fear

Free
1:14

git branch & git switch: Name First, Move Second

Premium
1:20

git switch -c and --detach: Two Ways to Move

Premium
3:07

git checkout: The Old Master Key

Premium
3:19

Fast-forward: The Merge With No Merge Commit

Premium
5:10

The Three-Way Merge: One Commit, Two Parents

Premium
3:58

git log Prints a List. History Is a Graph.

Premium
5:07

Merge Conflict: Git Asking a Question

Free
3:07

Two Panes Compare, Three Panes Rule

Premium
2:10

The Ruling Desk: Both Moved One Line

Premium
2:39

Rulings Beyond One Line

Premium
3:36

git merge Arguments: -m, --no-ff, --abort

Premium
4:30

Rebase vs Merge: Two Endings for a Stale Desk

Premium
3:13

git rebase --onto: The Transplant

Premium
3:04

Pull Request = Merge Request

Premium
3:17

git remote - Naming the Server Copy

Premium
2:48

git fetch: The Mail Arrives, Held

Premium
2:44

git fetch vs git pull - Look First, Then File It In

Premium
3:33

git pull: Fetch, Then File It In

Premium
4:12

git push - The Refusal Is Protection

Premium
4:27

git push --force-with-lease - The Safer Force

Premium
4:54

The Pull Request Loop - Branch, Push, Review, Merge

Premium
3:09

"Your Branch Is Behind" - Behind and Ahead, Decoded

Premium
3:11

git cherry-pick - Copy One Commit's Change

Premium
3:48

git bisect - Find the Breaking Commit by Halving

Premium
4:20

git stash - Park Half-Done Work

Premium
3:45

git tag - A Name That Does Not Advance

Premium
3:10

git rebase -i - Rewrite a Run of Commits

Premium
4:07

The Merge View: Three Panes, One Ruling

Premium
3:31

Merge Conflicts Have Shapes

Premium
3:53

Reading Conflict Markers

Premium
4:16

Resolving: Four Moves, One Exit Door

Premium
4:15

The Rebase Flip: ours Is Not Yours

Premium
4:47

A Clean Merge Can Still Be Wrong

Premium
3:21

Reverting a Merge: the Dead End

Premium
4:05

Never Resolve on the Release Line

Premium
4:05

Your IDE's History Views Are Git Queries

Premium
3:42

git log Can Answer for One File - Even Across a Rename

Premium
2:33

git blame: Who Last Touched Every Line

Premium
2:37

Compare Any Two Moments, Any Time

Premium
4:12

Back-Merge, Forward-Merge: Two Directions

Premium
3:57

Git Flow - Five Lanes, Fixed Jobs

Premium
2:57

Trunk-Based - One Line, Tiny Branches

Premium
3:18

Release Branches - Supporting Old Versions

Premium
2:57

Stabilization Flow - Bugfix vs Hotfix

Premium
3:41

Choosing a Branching Strategy

Premium
4:37

Worktrees - The Practice Run

Premium
3:34

The House Words

Premium
3:18

What This Course Did NOT Cover

Premium
4:27

The Whole Course on One Line

Premium
4:40

Reading the Manual - the Decoder Ring

Premium