Version Control (Git)
Tracking every change so you can review, undo and collaborate.
Backend Engineer
Junior
Write correct code, ship small changes safely, ask good questions.
Core: start here
- GitThe distributed version control system almost everyone uses.
- CommitA snapshot of changes with a message explaining them.
- .gitignoreFiles Git should never track, like build output and .env.
- CloneCopying a remote repository, with its full history, to your machine.
- AmendChanging the most recent commit's content or message.
- BranchA movable pointer to a line of commits, for isolated work.
- Commit MessageA summary line plus a body explaining why a change was made.
- DiffSeeing exactly what changed between commits, branches or your working copy.
- Log and HistoryBrowsing and filtering commit history.
- RebaseReplaying commits on top of another base for a linear history.
- Merge ConflictTwo branches changed the same lines and Git needs you to decide.
20 more junior concepts
- Git ConfigYour name, email, aliases and defaults, at global or repository level.
- RepositoryA project's files plus their complete history.
- Staging AreaWhere you choose which changes go into the next commit.
- RemoteAnother copy of the repository, usually "origin" on GitHub or GitLab.
- ForkYour own copy of someone else's repository, for contributing via pull requests.
- Push, Pull, FetchSending commits, downloading and merging, or only downloading.
- RevertCreating a new commit that undoes an earlier one.
- TagA named pointer to a commit, usually marking a release.
- Version ControlTracking every change to code so you can review, revert and collaborate.
- Atomic CommitOne commit doing one logical thing, easy to review and revert.
- BlameSeeing who last changed each line and in which commit.
- Branch Naming ConventionsNames like feat/login-page that tell people what a branch is for.
- Conventional CommitsA commit message convention like "feat:" and "fix:" that tools can parse.
- HEADGit's pointer to the commit you currently have checked out.
- MergeCombining the histories of two branches.
- StashTemporarily shelving uncommitted changes.
- Detached HEADChecking out a commit directly instead of a branch.
- ResetMoving a branch pointer back, in soft, mixed or hard mode.
- Force PushOverwriting remote history; use --force-with-lease and never on shared branches.
- SquashCombining several commits into one.
Mid-level
Own a feature end to end without hand-holding.
Core: start here
- BisectBinary-searching history to find the commit that introduced a bug.
- Interactive RebaseRewriting commits: squash, reorder, edit, drop.
- Merge vs RebasePreserving history as it happened vs rewriting it to be linear.
10 more mid-level concepts
- MonorepoMany projects living in one repository.
- SubmoduleA repository embedded inside another at a fixed commit.
- Cherry-PickApplying one specific commit onto another branch.
- Git HooksScripts that run on Git events, like linting before a commit.
- Git LFSStoring large binary files outside normal Git history.
- ReflogGit's log of where HEAD has been; your undo history after disasters.
- Signed CommitsCryptographically proving who authored a commit.
- Fast-Forward vs Merge CommitMoving a branch pointer ahead vs recording a merge commit.
- Rewriting Shared HistoryWhy rebasing or force-pushing shared branches breaks teammates.
- Removing Secrets from Git HistoryPurging a committed secret with git filter-repo, and why you must rotate it anyway.
Senior
Own a system, its failure modes, and its trade-offs.
- Git InternalsBlobs, trees, commits and refs: what Git actually stores.
- Patch FilesSharing changes as diff files instead of branches.
- Monorepo vs PolyrepoOne repository for everything vs one per project.
- WorktreeSeveral working directories checked out from one repository.
Data Analyst
Junior
Write correct SQL, build trusted dashboards, ask good questions.
- GitThe distributed version control system almost everyone uses.
- CommitA snapshot of changes with a message explaining them.
- .gitignoreFiles Git should never track, like build output and .env.
- RemoteAnother copy of the repository, usually "origin" on GitHub or GitLab.
- BranchA movable pointer to a line of commits, for isolated work.
- Push, Pull, FetchSending commits, downloading and merging, or only downloading.
- Version ControlTracking every change to code so you can review, revert and collaborate.
Mid-level
Own an analysis end to end, from vague question to recommendation.
- Merge ConflictTwo branches changed the same lines and Git needs you to decide.
Data Engineer
Junior
Build and fix pipelines from clear specs; write correct SQL.
Core: start here
- GitThe distributed version control system almost everyone uses.
- CommitA snapshot of changes with a message explaining them.
- .gitignoreFiles Git should never track, like build output and .env.
- CloneCopying a remote repository, with its full history, to your machine.
- AmendChanging the most recent commit's content or message.
- BranchA movable pointer to a line of commits, for isolated work.
- Commit MessageA summary line plus a body explaining why a change was made.
- DiffSeeing exactly what changed between commits, branches or your working copy.
- Log and HistoryBrowsing and filtering commit history.
- RebaseReplaying commits on top of another base for a linear history.
- Merge ConflictTwo branches changed the same lines and Git needs you to decide.
20 more junior concepts
- Git ConfigYour name, email, aliases and defaults, at global or repository level.
- RepositoryA project's files plus their complete history.
- Staging AreaWhere you choose which changes go into the next commit.
- RemoteAnother copy of the repository, usually "origin" on GitHub or GitLab.
- ForkYour own copy of someone else's repository, for contributing via pull requests.
- Push, Pull, FetchSending commits, downloading and merging, or only downloading.
- RevertCreating a new commit that undoes an earlier one.
- TagA named pointer to a commit, usually marking a release.
- Version ControlTracking every change to code so you can review, revert and collaborate.
- Atomic CommitOne commit doing one logical thing, easy to review and revert.
- BlameSeeing who last changed each line and in which commit.
- Branch Naming ConventionsNames like feat/login-page that tell people what a branch is for.
- Conventional CommitsA commit message convention like "feat:" and "fix:" that tools can parse.
- HEADGit's pointer to the commit you currently have checked out.
- MergeCombining the histories of two branches.
- StashTemporarily shelving uncommitted changes.
- Detached HEADChecking out a commit directly instead of a branch.
- ResetMoving a branch pointer back, in soft, mixed or hard mode.
- Force PushOverwriting remote history; use --force-with-lease and never on shared branches.
- SquashCombining several commits into one.
Mid-level
Own pipelines and models end to end, including their quality.
- MonorepoMany projects living in one repository.
- SubmoduleA repository embedded inside another at a fixed commit.
- Cherry-PickApplying one specific commit onto another branch.
- Git HooksScripts that run on Git events, like linting before a commit.
- Git LFSStoring large binary files outside normal Git history.
- ReflogGit's log of where HEAD has been; your undo history after disasters.
- Signed CommitsCryptographically proving who authored a commit.
- BisectBinary-searching history to find the commit that introduced a bug.
- Fast-Forward vs Merge CommitMoving a branch pointer ahead vs recording a merge commit.
- Interactive RebaseRewriting commits: squash, reorder, edit, drop.
- Merge vs RebasePreserving history as it happened vs rewriting it to be linear.
- Rewriting Shared HistoryWhy rebasing or force-pushing shared branches breaks teammates.
- Removing Secrets from Git HistoryPurging a committed secret with git filter-repo, and why you must rotate it anyway.
Senior
Design the platform's storage, processing and modeling choices.
- Git InternalsBlobs, trees, commits and refs: what Git actually stores.
- Patch FilesSharing changes as diff files instead of branches.
- Monorepo vs PolyrepoOne repository for everything vs one per project.
- WorktreeSeveral working directories checked out from one repository.
Frontend Engineer
Junior
Build UI that works, ship small changes safely, ask good questions.
Core: start here
- GitThe distributed version control system almost everyone uses.
- CommitA snapshot of changes with a message explaining them.
- .gitignoreFiles Git should never track, like build output and .env.
- CloneCopying a remote repository, with its full history, to your machine.
- AmendChanging the most recent commit's content or message.
- BranchA movable pointer to a line of commits, for isolated work.
- Commit MessageA summary line plus a body explaining why a change was made.
- DiffSeeing exactly what changed between commits, branches or your working copy.
- Log and HistoryBrowsing and filtering commit history.
- RebaseReplaying commits on top of another base for a linear history.
- Merge ConflictTwo branches changed the same lines and Git needs you to decide.
20 more junior concepts
- Git ConfigYour name, email, aliases and defaults, at global or repository level.
- RepositoryA project's files plus their complete history.
- Staging AreaWhere you choose which changes go into the next commit.
- RemoteAnother copy of the repository, usually "origin" on GitHub or GitLab.
- ForkYour own copy of someone else's repository, for contributing via pull requests.
- Push, Pull, FetchSending commits, downloading and merging, or only downloading.
- RevertCreating a new commit that undoes an earlier one.
- TagA named pointer to a commit, usually marking a release.
- Version ControlTracking every change to code so you can review, revert and collaborate.
- Atomic CommitOne commit doing one logical thing, easy to review and revert.
- BlameSeeing who last changed each line and in which commit.
- Branch Naming ConventionsNames like feat/login-page that tell people what a branch is for.
- Conventional CommitsA commit message convention like "feat:" and "fix:" that tools can parse.
- HEADGit's pointer to the commit you currently have checked out.
- MergeCombining the histories of two branches.
- StashTemporarily shelving uncommitted changes.
- Detached HEADChecking out a commit directly instead of a branch.
- ResetMoving a branch pointer back, in soft, mixed or hard mode.
- Force PushOverwriting remote history; use --force-with-lease and never on shared branches.
- SquashCombining several commits into one.
Mid-level
Own a feature end to end without hand-holding.
Core: start here
- Merge vs RebasePreserving history as it happened vs rewriting it to be linear.
12 more mid-level concepts
- MonorepoMany projects living in one repository.
- SubmoduleA repository embedded inside another at a fixed commit.
- Cherry-PickApplying one specific commit onto another branch.
- Git HooksScripts that run on Git events, like linting before a commit.
- Git LFSStoring large binary files outside normal Git history.
- ReflogGit's log of where HEAD has been; your undo history after disasters.
- Signed CommitsCryptographically proving who authored a commit.
- BisectBinary-searching history to find the commit that introduced a bug.
- Fast-Forward vs Merge CommitMoving a branch pointer ahead vs recording a merge commit.
- Interactive RebaseRewriting commits: squash, reorder, edit, drop.
- Rewriting Shared HistoryWhy rebasing or force-pushing shared branches breaks teammates.
- Removing Secrets from Git HistoryPurging a committed secret with git filter-repo, and why you must rotate it anyway.
Senior
Own an app's architecture, performance, and failure modes.
- Git InternalsBlobs, trees, commits and refs: what Git actually stores.
- Patch FilesSharing changes as diff files instead of branches.
- Monorepo vs PolyrepoOne repository for everything vs one per project.
- WorktreeSeveral working directories checked out from one repository.