Files
git-workshop/GIT-CHEATSHEET.md
2026-01-05 13:34:59 +01:00

494 lines
8.8 KiB
Markdown

# Git Command Cheatsheet
A comprehensive reference for all Git commands covered in this workshop.
---
## Essentials
### Repository Initialization
```bash
git init
```
Initialize a new Git repository in the current directory.
### Staging & Committing
```bash
git status
```
Show the current state of your working directory and staging area.
```bash
git add <file>
```
Add a file to the staging area (prepare it for commit).
```bash
git add .
```
Add all changed files in the current directory to the staging area.
```bash
git commit -m "message"
```
Create a new commit with the staged changes and a descriptive message.
```bash
git commit -am "message"
```
Stage all modified tracked files and commit in one step (doesn't include new files).
### Viewing History
```bash
git log
```
Show the commit history for the current branch.
```bash
git log --oneline
```
Show commit history in compact one-line format.
```bash
git log --oneline --graph --all
```
Show commit history as a graph with all branches.
```bash
git log --stat
```
Show commit history with statistics about which files changed.
```bash
git show <commit>
```
Display detailed information about a specific commit.
```bash
git show <commit>:<file>
```
View the contents of a file from a specific commit.
### Comparing Changes
```bash
git diff
```
Show unstaged changes in your working directory.
```bash
git diff --staged
```
Show staged changes (what will be committed).
```bash
git diff <commit1> <commit2>
```
Compare two commits.
```bash
git diff <commit1> <commit2> <file>
```
Compare changes to a specific file between two commits.
**Understanding diff output:**
- Lines with `+` (green) = added
- Lines with `-` (red) = removed
- Lines with ` ` (space) = unchanged (context)
- `@@ -1,5 +1,7 @@` = location of changes (old line/count, new line/count)
For a detailed guide on reading diff output, see Module 02 README.md.
### Branching
```bash
git branch
```
List all local branches (current branch marked with *).
```bash
git branch <branch-name>
```
Create a new branch.
```bash
git branch -d <branch-name>
```
Delete a branch (only if it's been merged).
```bash
git branch -D <branch-name>
```
Force delete a branch (even if not merged).
```bash
git switch <branch-name>
```
Switch to a different branch.
```bash
git switch -c <branch-name>
```
Create a new branch and switch to it in one command.
```bash
git switch -
```
Switch back to the previous branch.
### Merging
```bash
git merge <branch-name>
```
Merge the specified branch into your current branch.
```bash
git merge --abort
```
Abort a merge in progress and return to the pre-merge state.
### Merge Conflict Resolution
```bash
git status
```
During a merge conflict, shows which files have conflicts.
```bash
# After resolving conflicts manually:
git add <resolved-file>
git commit
```
Stage resolved files and complete the merge.
### Restoring Files
```bash
git restore <file>
```
Discard changes in working directory (restore from last commit).
```bash
git restore --staged <file>
```
Unstage a file (remove from staging area but keep changes).
```bash
git restore --source=<commit> <file>
```
Restore a file to its state in a specific commit.
---
## Advanced
### Rebasing
```bash
git rebase <branch>
```
Reapply your commits on top of another branch (creates linear history).
```bash
git rebase -i <commit>
```
Interactive rebase - edit, reorder, squash, or drop commits.
```bash
git rebase --continue
```
Continue rebasing after resolving conflicts.
```bash
git rebase --abort
```
Abort a rebase and return to the original state.
### Reset (History Manipulation)
```bash
git reset --soft HEAD~<n>
```
Undo last n commits but keep changes staged.
```bash
git reset --mixed HEAD~<n>
```
Undo last n commits and unstage changes (default mode).
```bash
git reset --hard HEAD~<n>
```
Undo last n commits and discard all changes (DESTRUCTIVE).
```bash
git reset --hard <commit>
```
Reset your branch to a specific commit, discarding all changes.
### Revert (Safe Undo)
```bash
git revert <commit>
```
Create a new commit that undoes changes from a specific commit (safe for shared branches).
```bash
git revert --no-commit <commit>
```
Revert changes but don't create the commit yet (allows editing).
```bash
git revert --abort
```
Abort a revert in progress.
### Cherry-Pick
```bash
git cherry-pick <commit>
```
Apply the changes from a specific commit to your current branch.
```bash
git cherry-pick <commit1> <commit2> <commit3>
```
Cherry-pick multiple commits.
```bash
git cherry-pick --continue
```
Continue cherry-picking after resolving conflicts.
```bash
git cherry-pick --abort
```
Abort a cherry-pick in progress.
### Stash (Temporary Storage)
```bash
git stash
```
Save your uncommitted changes temporarily and revert to a clean working directory.
```bash
git stash save "description"
```
Stash changes with a descriptive message.
```bash
git stash list
```
Show all stashed changes.
```bash
git stash pop
```
Apply the most recent stash and remove it from the stash list.
```bash
git stash apply
```
Apply the most recent stash but keep it in the stash list.
```bash
git stash apply stash@{n}
```
Apply a specific stash by index.
```bash
git stash drop
```
Delete the most recent stash.
```bash
git stash drop stash@{n}
```
Delete a specific stash.
```bash
git stash clear
```
Delete all stashes.
### Working with Remotes
```bash
git clone <url>
```
Create a local copy of a remote repository.
```bash
git remote
```
List all remote repositories.
```bash
git remote -v
```
List all remote repositories with their URLs.
```bash
git remote add <name> <url>
```
Add a new remote repository.
```bash
git remote remove <name>
```
Remove a remote repository.
```bash
git fetch <remote>
```
Download changes from remote but don't merge them.
```bash
git pull <remote> <branch>
```
Fetch and merge changes from remote branch to current branch.
```bash
git pull
```
Fetch and merge from the tracked remote branch.
```bash
git push <remote> <branch>
```
Upload your commits to a remote branch.
```bash
git push -u <remote> <branch>
```
Push and set up tracking relationship (use -u first time pushing a branch).
```bash
git push
```
Push to the tracked remote branch.
### Worktrees (Multiple Working Directories)
```bash
git worktree add <path> <branch>
```
Create a new working directory linked to your repository for a specific branch.
```bash
git worktree add <path> -b <new-branch>
```
Create a new branch and working directory for it.
```bash
git worktree list
```
Show all worktrees associated with the repository.
```bash
git worktree remove <path>
```
Remove a worktree.
```bash
git worktree prune
```
Clean up stale worktree administrative data.
### Bisect (Binary Search for Bugs)
```bash
git bisect start
```
Start a bisect session to find which commit introduced a bug.
```bash
git bisect bad
```
Mark the current commit as bad (contains the bug).
```bash
git bisect good <commit>
```
Mark a commit as good (doesn't contain the bug).
```bash
git bisect reset
```
End the bisect session and return to the original branch.
```bash
git bisect run <script>
```
Automatically test commits using a script to find the bad commit.
---
## Useful Tips
### Viewing Changes
- Use `git log --oneline --graph --all` to visualize branch structure
- Use `git log -p` to show the actual changes (patch) in each commit
- Use `git log --author="name"` to filter commits by author
- Use `git log --since="2 weeks ago"` to filter commits by date
### Undoing Changes
- **Haven't committed yet?** Use `git restore <file>` to discard changes
- **Staged but want to unstage?** Use `git restore --staged <file>`
- **Committed to wrong branch?** Use `git cherry-pick` to copy the commit to the right branch
- **Want to change last commit message?** Use `git commit --amend`
- **Pushed to remote already?** Use `git revert` (not reset) to safely undo
### Best Practices
- Commit often with clear, descriptive messages
- Pull before you push to avoid conflicts
- Use branches for new features or experiments
- Don't rebase or reset commits that have been pushed to shared branches
- Use `git stash` when you need to switch contexts quickly
- Test your changes before committing
### Getting Help
```bash
git help <command>
```
Show detailed help for any Git command.
```bash
git <command> --help
```
Alternative way to show help.
```bash
git <command> -h
```
Show brief usage summary.
---
## Module Reference
Each workshop module focuses on specific commands:
- **Module 01**: init, add, commit, status
- **Module 02**: log, show, diff
- **Module 03**: branch, switch
- **Module 04**: merge (fast-forward and three-way)
- **Module 05**: merge (conflict resolution)
- **Module 06**: rebase
- **Module 07**: reset (interactive rebase alternative)
- **Module 08**: cherry-pick
- **Module 09**: reset vs revert
- **Module 10**: stash
- **Module 11**: clone, remote, push, pull, fetch
- **Module 12**: worktree
- **Module 13**: bisect