Contents

Engineering Craft

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

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

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.