© 2026 Dometrain. All rights reserved.
Learn how to use Git, from your first commit to branching, merging, and rebasing.
Git is the most heavily used tool in a software engineer’s daily workflow, yet many developers rely on a fragile set of memorized commands and panic when a repository gets into an unexpected state. This course builds a concrete mental model of Git from the ground up, starting at the terminal with repository creation and your first commit. You will master the core mechanics of the three places your work lives by reading git status, staging with intent, and ignoring files with .gitignore, before learning to rewrite your last commit and unstage changes. From there, we explore how to read and navigate history using git log and relative references like ~ and ^, alongside safe file operations using git mv, git rm, and the two-argument checkout to retrieve files from the past.
Once the foundation is set, you will manage parallel work by creating, renaming, and deleting branches, visualizing the shape of history, and calmly handling a detached HEAD. The course then covers merging in detail, explaining fast-forward merges, preserving history with –no-ff, and resolving conflicts from start to finish, complete with the merge --abort escape hatch. You will learn how to undo mistakes safely using reset --soft, reset --mixed, the polite revert, and how to rescue lost work from a reset --hard using the reflog. Next, we move commits around with cherry-pick and rebase, including how to handle conflicts or use rebase --skip and –abort. Finally, you will manage work-in-progress with stash push and pop, mark releases with lightweight and annotated tags, and interact with remotes using push, fetch, and pull, culminating in a capstone where you build a release from start to finish.