---
# System prepended metadata

title: A Practical Guide to Git

---

# A Practical Guide to Git
Modify through: [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/jmrecodes/git-guide)

Welcome to this comprehensive guide to Git! Whether you are a beginner just starting your journey in version control or an experienced developer looking to sharpen your skills, this guide is for you.

My goal is to provide a simplified, streamlined, but complete walkthrough of Git's fundamentals and its more advanced features. We'll cover everything from your first commit to complex history manipulation.

## Table of Contents

1.  [**Introduction to Git**](https://hackmd.io/@jmrecodes/ry-5too7gx)
    *   What is Git?
    *   Why is Version Control Important?
    *   A Quick Look at Git's Philosophy

2.  [**Getting Started**](https://hackmd.io/@jmrecodes/Hynqtos7ge)
    *   Installing Git
    *   First-Time Git Configuration (`git config`)
    *   Creating Your First Repository (`git init`)

3.  [**Basic Commands: The Day-to-Day Workflow**](https://hackmd.io/@jmrecodes/H1FiYji7xl)
    *   The Three States: Working Directory, Staging Area, and Repository
    *   Checking Status (`git status`)
    *   Adding Files to the Staging Area (`git add`)
    *   Committing Changes (`git commit`)
    *   Viewing Commit History (`git log`)
    *   Ignoring Files (`.gitignore`)

4.  [**Branching and Merging**](https://hackmd.io/@jmrecodes/ByLhtoimee)
    *   What is a Branch?
    *   Creating and Switching Branches (`git branch`, `git checkout`, `git switch`)
    *   Merging Branches (`git merge`)
    *   Resolving Merge Conflicts

5.  [**Working with Remotes**](https://hackmd.io/@jmrecodes/S146Fio7eg)
    *   Understanding Remotes
    *   Adding a Remote Repository (`git remote add`)
    *   Fetching and Pulling from Remotes (`git fetch`, `git pull`)
    *   Pushing to Remotes (`git push`)

6.  [**Advanced Topics: Rewriting History & More**](https://hackmd.io/@jmrecodes/r1VAYoimel)
    *   Interactive Rebase (`git rebase -i`)
    *   Cherry Picking Commits (`git cherry-pick`)
    *   Resetting Commits (`git reset`)
    *   A practical example combining `cherry-pick` and `reset`

---

Ready to dive in? Start with the [Introduction to Git](https://hackmd.io/@jmrecodes/ry-5too7gx).