Web
HTML
CSS
JavaScript
TypeScript
Bootstrap
Sass
Responsive
W3.CSS
W3.JS
Frontend
React
Vue
Next.js
AngularJS
jQuery
AJAX
SVG
Canvas
Graphics
Backend
Node.js
Python
Java
PHP
C#
Go
Rust
Kotlin
C
C++
Django
Databases
SQL
MySQL
PostgreSQL
MongoDB
JSON
Data & AI
Data Science
Machine Learning
Statistics
R
Pandas
NumPy
Matplotlib
SciPy
AI
Generative AI
ChatGPT
Tools
Git
DSA
AWS Cloud
Raspberry Pi
AppML
Icons
Colors
How To
Excel
Google Sheets
HTML
CSS
JavaScript
SQL
Python
Java
PHP
HowTo
Bootstrap
W3CSS
React
jQuery
Nextjs
Django
MySQL
PostgreSQL
MongoDB
C
Cpp
CSharp
R
Go
Kotlin
Rust
Git
TypeScript
JSON
AJAX
NodeJS
RaspberryPi
Vue
AngularJS
W3JS
SASS
SVG
Canvas
Graphics
Colors
Icons
RWD
AppML
Data Science
NumPy
Pandas
SciPy
Matplotlib
AI
Generative AI
ChatGPT
MachineLearning
DSA
Statistics
Excel
Google Sheets
AWS Cloud
Git
Overview
Learn Git
This is a starter landing page for Git. Replace this paragraph with a short, friendly description of the topic and what readers will learn from the tutorial series.
Tutorial contents
What is Git?
History of Git
Why Use Git?
Git vs GitHub
Version Control Systems
How Git Works
Distributed vs Centralized VCS
Installing Git
Install Git on Windows
Install Git on macOS
Install Git on Linux
Git Configuration (git config)
Getting Help (git help)
Git Aliases
Setting Up an Editor
Line Endings (CRLF vs LF)
Initialize a Repository (git init)
Clone a Repository (git clone)
Repository Structure
Working Directory, Staging, Repository
The Git Lifecycle
Your First Commit
Checking Status (git status)
Staging Changes (git add)
Committing Changes (git commit)
Writing Good Commit Messages
Viewing Differences (git diff)
Viewing History (git log)
Inspecting Objects (git show)
Removing Files (git rm)
Moving & Renaming (git mv)
Tracking & Untracking Files
Ignoring Files (.gitignore)
.gitignore Patterns
Global .gitignore
.gitattributes File
Tracking Empty Folders (.gitkeep)
Introduction to Branches
Creating Branches (git branch)
Switching Branches (git switch)
git checkout vs git switch
Listing Branches
Renaming Branches
Deleting Branches
Branch Naming Conventions
Detached HEAD State
Introduction to Merging
git merge Command
Fast-Forward Merge
Three-Way Merge
Merge Conflicts
Resolving Conflicts
Using Merge Tools
Aborting a Merge
Merge Strategies (ours, theirs, recursive)
Squash Merge
No Fast-Forward (--no-ff)
Introduction to Rebasing
git rebase Command
Interactive Rebase (-i)
Rebase vs Merge
Handling Rebase Conflicts
git rebase --onto
Golden Rule of Rebasing
Aborting a Rebase
Introduction to Remotes
Managing Remotes (git remote)
Adding a Remote
Removing & Renaming Remotes
Fetching Changes (git fetch)
Pulling Changes (git pull)
Pull with Rebase
Pushing Changes (git push)
Tracking Branches
Upstream Branches
Force Push (--force, --force-with-lease)
Protected Branches
Introduction to GitHub
Creating a GitHub Account
Creating a Repository on GitHub
SSH Keys for GitHub
Personal Access Tokens
Writing a README.md
Choosing a LICENSE
GitHub Pages
GitHub Gists
Forking Repositories
Pull Requests
Creating a Pull Request
Code Reviews
PR Templates
GitHub Issues
Issue Templates
Labels & Milestones
GitHub Discussions
Mentions & References
CODEOWNERS File
Undoing Changes Overview
git restore
git reset (soft, mixed, hard)
git revert
reset vs revert vs restore
Amending Commits (--amend)
Unstaging Files
Discarding Local Changes
Recovery with git reflog
Recovering Lost Commits
Advanced git log Options
Custom Log Formatting
git blame
Bug Hunting with git bisect
Searching Code (git grep)
Searching History (git log -S, -G)
git shortlog
git describe
Introduction to git stash
Saving Changes (stash push)
Listing Stashes (stash list)
Apply vs Pop
Dropping & Clearing Stashes
Creating a Branch from Stash
Stashing Untracked Files
Introduction to Tags
Lightweight Tags
Annotated Tags
Creating Tags
Listing & Searching Tags
Deleting Tags
Pushing Tags to Remote
Checking Out a Tag
Tags vs Branches
Git Workflows Overview
Centralized Workflow
Feature Branch Workflow
Gitflow Workflow
GitHub Flow
GitLab Flow
Trunk-Based Development
Forking Workflow
Cherry-Picking Commits
Submodules
Subtrees
Worktrees
Git Hooks
Client-Side Hooks
Server-Side Hooks
Creating & Applying Patches
Git Bundles
Creating Archives (git archive)
Sparse Checkout
Shallow & Partial Clones
Git Notes
git replace
Rewriting History (filter-repo)
Git Internals Overview
Git Objects (blob, tree, commit, tag)
SHA-1 Hashes
References (refs)
The HEAD Pointer
The Index (Staging Area)
Packfiles
Git Storage Model
Plumbing vs Porcelain Commands
Garbage Collection (git gc)
Verifying Repos (git fsck)
Pruning Objects (git prune)
Repacking (git repack)
Large File Storage (Git LFS)
Managing Repository Size
git maintenance
GPG Signing Commits
SSH Signing
Verifying Signatures
Credential Storage
Keeping Secrets Out of Git
Scanning for Secrets
Commit Message Conventions
Conventional Commits
Semantic Versioning (SemVer)
Atomic Commits
Monorepo vs Polyrepo
Branch Protection Rules
Pull Request Best Practices
Release Management
Git CLI vs GUI
GitHub Desktop
GitKraken
SourceTree
VS Code Git Integration
IntelliJ / JetBrains Git Tools
lazygit & tig (Terminal UIs)
Common Git Errors
Fixing Commits on Wrong Branch
Undoing a Push
Recovering a Deleted Branch
Fixing a Bad Merge
Removing a Large File from History
Changing Commit Author
Resolving Permission Issues
GitHub Actions Introduction
Writing a Workflow
Secrets in GitHub Actions
GitLab CI/CD
Bitbucket Pipelines
Pre-commit Framework
Husky (JS Git Hooks)
Automated Testing on Push
Automated Deployment
GitHub Platform
GitLab Platform
Bitbucket Platform
Self-Hosted Git (Gitea, Gogs)
Azure DevOps Repos
Team Collaboration Workflow
Hotfix Workflow
Release Workflow
Contributing to Open Source
Managing Pull Requests at Scale
Code Review Tips
Working with Monorepos
Git Cheat Sheet
Command Reference
Git Glossary
Common Interview Questions
Real-World Scenarios
Further Learning Resources