Welcome to the GitHub Foundations hands-on demo project! This guide will walk you through Git and GitHub fundamentals using a practical example: building a simple Task Manager application.
- Git Basics - Local repository setup and essential commands
- Repository Management - Creating repositories, managing files, commits, and branches
- Collaboration Features - Pull requests, issues, discussions, and notifications
- Git installed on your computer
- A GitHub account
- A text editor (VS Code recommended)
- Terminal/Command Prompt access
Objective: Set up Git on your local machine with proper configuration.
git --versionIf Git is not installed, download it from git-scm.com.
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"git config --listgit config --global init.defaultBranch mainObjective: Initialize a Git repository and understand basic Git workflow.
mkdir task-manager
cd task-managergit initExpected Output: Initialized empty Git repository in .../task-manager/.git/
git statusWhat to observe: "On branch main", "No commits yet", "nothing to commit"
Objective: Learn the staging area concept and make your first commit.
Create a file named README.md with the following content:
# Task Manager
A simple task management application for learning Git and GitHub.
## Features
- Add tasks
- Mark tasks as complete
- Delete tasksgit statusWhat to observe: README.md appears as "Untracked files"
git add README.mdgit statusWhat to observe: File now appears under "Changes to be committed"
git commit -m "Initial commit: Add README"git logWhat to observe: Your commit with author, date, and message
Objective: Practice staging multiple files and understanding the workflow.
Create tasks.txt:
1. Learn Git basics
2. Practice commits
3. Master branching
Create config.json:
{
"appName": "Task Manager",
"version": "1.0.0",
"features": {
"addTask": true,
"deleteTask": true,
"editTask": false
}
}git statusgit add .Or individually:
git add tasks.txt
git add config.jsongit commit -m "Add initial task list and configuration"git log --onelineObjective: Learn to track changes and use git diff.
Add a new task:
1. Learn Git basics
2. Practice commits
3. Master branching
4. Explore GitHub features
git status
git diffWhat to observe: Lines added/removed with +/- symbols
git add tasks.txt
git diff --stagedgit commit -m "Add fourth task: Explore GitHub features"Objective: Connect your local repository to GitHub.
- Log in to GitHub
- Click the "+" icon → "New repository"
- Name:
task-manager-demo - Description: "Demo project for GitHub Foundations course"
- Keep it Public (for learning purposes)
- Do NOT initialize with README (we already have one locally)
- Click "Create repository"
git remote add origin https://github.com/YOUR-USERNAME/task-manager-demo.gitReplace YOUR-USERNAME with your actual GitHub username.
git remote -vgit push -u origin mainNote: You may need to authenticate with GitHub. Use a Personal Access Token if prompted.
Visit your repository URL and confirm all files are there.
Objective: Create and manage branches for feature development.
git branch feature/add-prioritiesgit branchWhat to observe: * indicates your current branch (main)
git checkout feature/add-prioritiesOr use the shorthand to create and switch:
git checkout -b feature/add-prioritiesModify tasks.txt:
1. [HIGH] Learn Git basics
2. [MEDIUM] Practice commits
3. [HIGH] Master branching
4. [LOW] Explore GitHub features
git add tasks.txt
git commit -m "Add priority levels to tasks"git push -u origin feature/add-prioritiesgit checkout mainWhat to observe: Your tasks.txt doesn't have priority levels (changes are isolated to the branch)
Objective: Merge feature branch into main branch.
git checkout maingit merge feature/add-prioritiescat tasks.txtWhat to observe: Priority levels are now in main branch
git push origin mainLocal:
git branch -d feature/add-prioritiesRemote:
git push origin --delete feature/add-prioritiesObjective: Understand and resolve merge conflicts.
git checkout -b feature/ui-improvementsModify config.json:
{
"appName": "Task Manager Pro",
"version": "1.1.0",
"features": {
"addTask": true,
"deleteTask": true,
"editTask": true
},
"theme": "dark"
}git add config.json
git commit -m "Add dark theme and enable edit feature"
git push -u origin feature/ui-improvementsgit checkout main
git checkout -b feature/backend-updatesModify config.json (same file, different changes):
{
"appName": "Task Manager",
"version": "2.0.0",
"features": {
"addTask": true,
"deleteTask": true,
"editTask": false,
"searchTask": true
},
"database": "sqlite"
}git add config.json
git commit -m "Add database config and search feature"git checkout main
git merge feature/ui-improvements
git push origin maingit merge feature/backend-updatesWhat to observe: CONFLICT message
git status
cat config.jsonWhat to observe: Conflict markers (<<<<<<<, =======, >>>>>>>)
Edit config.json to combine both changes:
{
"appName": "Task Manager Pro",
"version": "2.0.0",
"features": {
"addTask": true,
"deleteTask": true,
"editTask": true,
"searchTask": true
},
"theme": "dark",
"database": "sqlite"
}git add config.json
git commit -m "Merge backend updates and resolve conflicts"
git push origin mainObjective: Use GitHub Issues to track tasks and bugs.
- Go to your repository on GitHub
- Click "Issues" tab
- Click "New issue"
- Title: "Add task categories feature"
- Description:
## Description Users should be able to categorize tasks (Work, Personal, Shopping, etc.) ## Acceptance Criteria - [ ] Add category field to task structure - [ ] Update tasks.txt format - [ ] Document category usage in README ## Labels enhancement, good first issue - Assign labels: "enhancement"
- Click "Submit new issue"
Create these additional issues:
- Bug: "Priority levels not sorted correctly" (label: bug)
- Enhancement: "Add due dates to tasks" (label: enhancement)
- Documentation: "Update README with installation instructions" (label: documentation)
What are Milestones? Milestones help you track progress on groups of issues or pull requests toward a specific goal (like a release version).
Create a Milestone:
- Go to your repository on GitHub
- Click "Issues" tab
- Click "Milestones" (next to Labels)
- Click "New milestone"
- Fill in:
- Title:
v1.1 - Basic Features - Due date:
2025-12-31(optional) - Description:
First release with priority levels and categories
- Title:
- Click "Create milestone"
Create Additional Milestones:
- Title:
v2.0 - Advanced Features, Due:2026-03-31 - Title:
Documentation Updates, Due:2025-12-20
Assign Issues to Milestones:
- Open an issue (e.g., "Add task categories feature")
- On the right sidebar, click "Milestone"
- Select
v1.1 - Basic Features - The issue is now tracked under that milestone
View Milestone Progress:
- Go to Issues → Milestones
- See percentage completion for each milestone
- Click a milestone to see all associated issues
What to observe: Visual progress bar showing completed vs. total issues
Organize with Labels:
- Assign issues to yourself using the "Assignees" section
- Use labels to categorize (bug, enhancement, documentation, etc.)
- Combine milestones + labels for powerful organization
Objective: Create and review pull requests for collaborative development.
git checkout main
git pull origin main
git checkout -b feature/task-categoriesModify tasks.txt:
[HIGH][Work] Learn Git basics
[MEDIUM][Personal] Practice commits
[HIGH][Work] Master branching
[LOW][Personal] Explore GitHub features
[MEDIUM][Work] Review pull requests
Update README.md to document categories:
# Task Manager
A simple task management application for learning Git and GitHub.
## Features
- Add tasks
- Mark tasks as complete
- Delete tasks
- **Priority levels** (HIGH, MEDIUM, LOW)
- **Categories** (Work, Personal, Shopping, etc.)
## Task Format[PRIORITY][CATEGORY] Task description
Example: `[HIGH][Work] Complete project documentation`
git add tasks.txt README.md
git commit -m "Add task categories feature
- Added category field to task format
- Updated example tasks with categories
- Documented category usage in README
Closes #1"Note: "Closes #1" will automatically close issue #1 when PR is merged
git push -u origin feature/task-categories- Go to your repository on GitHub
- Click "Pull requests" tab
- Click "New pull request"
- Base:
main, Compare:feature/task-categories - Title: "Add task categories feature"
- Description:
## Changes - Added category field to task structure - Updated tasks.txt with categorized tasks - Documented category feature in README ## Related Issue Closes #1 ## Testing - [x] Verified task format with categories - [x] Updated documentation ## Screenshots (If applicable, add screenshots) - Click "Create pull request"
- Review the "Files changed" tab
- Add comments or approve
- Click "Merge pull request"
- Confirm merge
- Delete the branch
git checkout main
git pull origin main
git branch -d feature/task-categoriesObjective: Practice reviewing pull requests and providing feedback.
git checkout -b feature/due-datesModify tasks.txt:
[HIGH][Work] Learn Git basics - Due: 2025-12-15
[MEDIUM][Personal] Practice commits - Due: 2025-12-16
[HIGH][Work] Master branching - Due: 2025-12-17
[LOW][Personal] Explore GitHub features - Due: 2025-12-20
[MEDIUM][Work] Review pull requests - Due: 2025-12-18
git add tasks.txt
git commit -m "Add due dates to tasks"
git push -u origin feature/due-datesCreate a pull request on GitHub.
- Go to "Files changed" in the PR
- Click on a line number to add a comment
- Example comment: "Should we use ISO 8601 format (YYYY-MM-DD) for consistency?"
- Click "Start a review"
- Add more comments on other lines
- Click "Review changes" → "Comment" or "Request changes"
Locally, make requested changes:
# Make your edits based on feedback
git add tasks.txt
git commit -m "Use ISO 8601 date format for due dates"
git push origin feature/due-datesWhat to observe: PR automatically updates with new commits
- Re-review the changes
- Approve the PR
- Merge it
Objective: Understand GitHub's notification system.
- Go to Settings → Notifications
- Review notification preferences:
- Participating
- Watching
- Email preferences
- On your repository page, click "Watch"
- Select "All Activity"
What happens: You'll receive notifications for all issues, PRs, and discussions
- Go to an issue or PR
- Click "Subscribe" / "Unsubscribe" on the right sidebar
- Test by @mentioning yourself in a comment
In an issue or PR comment:
@YOUR-USERNAME Could you review this approach?
What to observe: You receive a notification
Objective: Enable and use Discussions for community interaction.
- Go to repository Settings
- Scroll to "Features"
- Check "Discussions"
- Click "Discussions" tab
- Click "New discussion"
- Category: "General"
- Title: "Best practices for task organization"
- Body: "What's your preferred way to organize tasks? Share your tips!"
- Start discussion
- Reply to discussions
- Mark helpful answers
- Use reactions
Objective: Explore commit history and find specific changes.
# View detailed log
git log
# One-line format
git log --oneline
# Graph view
git log --graph --oneline --all
# Filter by author
git log --author="Your Name"
# Filter by date
git log --since="2 weeks ago"
# Search commit messages
git log --grep="feature"
# Show changes in a commit
git show <commit-hash>Objective: Learn to undo changes safely.
git add tasks.txt
git reset tasks.txtgit checkout -- tasks.txtSoft Reset - Undo commit but keep changes staged:
git reset --soft HEAD~1Use case: You want to re-commit with a different message or add more files
Mixed Reset - Undo commit and unstage changes (default):
git reset --mixed HEAD~1
# Or simply: git reset HEAD~1Use case: You want to modify files before committing again
Hard Reset - Undo commit and discard all changes:
git reset --hard HEAD~1git commit --amend -m "Updated commit message"Note: Adds staged changes to the last commit and/or updates its message
What is revert?
git revert creates a new commit that undoes the changes from a previous commit. This is safe for shared branches because it doesn't rewrite history.
Step 1: Find the commit hash
View recent commits:
git log --onelineExample output:
a1b2c3d (HEAD -> main) Add due dates feature
e4f5g6h Add task categories
i7j8k9l Add priority levels
m0n1o2p Initial commit
The commit hash is the alphanumeric code on the left (e.g., e4f5g6h)
Step 2: Copy the hash of the commit you want to undo
For example, to undo "Add task categories", copy e4f5g6h
Step 3: Revert the commit
git revert e4f5g6hWhat happens:
- Git opens an editor with a default message: "Revert 'Add task categories'"
- Save and close the editor
- A new commit is created that undoes the changes from
e4f5g6h
Step 4: Verify the revert
git log --onelineNew output:
p3q4r5s (HEAD -> main) Revert "Add task categories"
a1b2c3d Add due dates feature
e4f5g6h Add task categories
i7j8k9l Add priority levels
m0n1o2p Initial commit
Alternative: Revert without opening editor
git revert e4f5g6h --no-editAlternative: Revert multiple commits
# Revert a range of commits (oldest first)
git revert e4f5g6h..a1b2c3dWhen to use revert vs reset:
- ✅ Revert: When commits are already pushed to shared branches (safe, preserves history)
- ❌ Reset: Only for local commits not yet pushed (rewrites history)
Objective: Save work in progress temporarily without committing.
You're working on a feature but need to switch branches to fix a bug.
# Basic stash
git stash
# Stash with a descriptive message
git stash save "Work in progress on task filtering"
# Stash including untracked files
git stash -ugit stash listExample output:
stash@{0}: On feature/filtering: Work in progress on task filtering
stash@{1}: WIP on main: Add configuration
Apply and keep the stash:
# Apply most recent stash
git stash apply
# Apply specific stash
git stash apply stash@{1}Apply and remove the stash:
# Pop most recent stash
git stash pop
# Pop specific stash
git stash pop stash@{1}# Show changes in most recent stash
git stash show
# Show detailed diff
git stash show -p
# Show specific stash
git stash show stash@{1}# Remove specific stash
git stash drop stash@{0}
# Clear all stashes
git stash clearScenario: You're working on a feature branch when someone asks you to urgently fix a bug on main.
Step 1: Start working on a feature
git checkout -b feature/new-categoriesMake some changes to tasks.txt (but don't commit yet):
Add a line: "5. Create task categories"
Step 2: Check your uncommitted changes
git statusWhat to observe: Modified files shown in red (not staged)
Step 3: Urgent bug fix needed! Save your work temporarily
git stash save "WIP: Adding new task categories"Step 4: Verify working directory is now clean
git statusWhat to observe: "nothing to commit, working tree clean"
Step 5: Switch to main and fix the bug
git checkout main
# Fix the bug in another file
# Commit the bug fix
git add .
git commit -m "Fix urgent bug"Step 6: Go back to your feature branch
git checkout feature/new-categoriesStep 7: Restore your uncommitted changes
git stash popWhat to observe:
- Your uncommitted changes to
tasks.txtare back! - The stash is automatically removed from the stash list
- You can continue working where you left off
Alternative: If you want to keep the stash (apply without removing):
git stash apply
# Your changes are restored, but stash remains in the listObjective: Understand how to sync your local repository with remote changes using git pull.
git pull is a combination of two commands:
git fetch- Downloads changes from remote repositorygit merge- Merges those changes into your current branch
git pull origin mainWhat happens:
- Fetches latest changes from
origin/main - Merges them into your current branch
- Updates your working directory
git pull --rebase origin mainWhat's different:
- Fetches changes like normal pull
- Instead of merging, it rebases your commits on top of the fetched changes
- Creates a cleaner, linear history
Option 1: Default Pull (Merge Strategy)
git pull- Creates a merge commit if there are changes
- Preserves complete history
- Shows where branches diverged
Option 2: Pull with Fast-Forward Only
git pull --ff-only- Only updates if it can fast-forward
- Fails if divergent changes exist
- Prevents unwanted merge commits
- Good for keeping main branch clean
Option 3: Pull without Commit
git pull --no-commit- Fetches and merges but doesn't create merge commit
- Lets you review changes before committing
- Useful for careful code reviews
Option 4: Pull from Specific Branch
git pull origin feature/new-ui- Pulls from a specific branch instead of default
- Useful for reviewing teammate's work
Scenario: Simulate a team environment where remote changes need to be pulled.
Step 1: Create a change on GitHub (simulating a teammate's commit)
- Go to your repository on GitHub
- Click "Add file" → "Create new file"
- Name it
CONTRIBUTING.md - Add content:
# Contributing Guidelines ## How to Contribute 1. Fork the repository 2. Create a feature branch 3. Submit a pull request
- Commit with message: "Add contributing guidelines"
Step 2: Check your local repository status
git statusStep 3: Fetch to see what's different
git fetch originStep 4: View differences between local and remote
git diff origin/mainWhat to observe: The changes made on GitHub that aren't in your local copy
Step 5: Pull the changes
git pull origin mainExpected Output:
Updating abc1234..def5678
Fast-forward
CONTRIBUTING.md | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 CONTRIBUTING.md
Step 6: Verify changes are now local
cat CONTRIBUTING.md
# or
git log --oneline -3Use git pull (merge):
- When you want to preserve all history
- For feature branches
- When working with a team and want to show collaboration
Use git pull --rebase:
- To keep a linear history
- Before pushing your commits
- To avoid "merge bubble" commits
- When your changes don't conflict with remote
Use git pull --ff-only:
- On the main/production branch
- When you want to ensure you're up-to-date without creating merges
- To maintain a clean commit history
Objective: Learn to use git rebase to create a cleaner commit history and resolve conflicts.
Rebasing takes your commits and replays them on top of another branch's commits. Think of it as "moving your branch to start from a different point."
# Move your current branch on top of main
git rebase mainWhat happens:
- Git finds the common ancestor of your branch and main
- Saves your commits temporarily
- Updates your branch to match main
- Replays your commits one by one on top
Most powerful feature - lets you edit commit history before sharing.
# Rebase last 3 commits interactively
git rebase -i HEAD~3
# Rebase all commits since branching from main
git rebase -i mainEditor opens with options:
pick a1b2c3d Add task filtering
pick d4e5f6g Fix typo in filter
pick h7i8j9k Update documentation
# Commands:
# p, pick = use commit as-is
# r, reword = use commit, but edit message
# e, edit = use commit, but stop to amend
# s, squash = combine with previous commit, keep both messages
# f, fixup = combine with previous commit, discard this message
# d, drop = remove commit entirely
Step 1: Create a messy commit history
git checkout -b feature/add-authorsMake some commits:
# Commit 1 - Create AUTHORS file
echo "# Project Authors" > AUTHORS.md
git add AUTHORS.md
git commit -m "Add authors file"
# Commit 2 - Oops, typo!
echo "- John Doe (john@exmaple.com)" >> AUTHORS.md
git add AUTHORS.md
git commit -m "Add author"
# Commit 3 - Fix the typo
echo "- John Doe (john@example.com)" >> AUTHORS.md
git add AUTHORS.md
git commit -m "Fix email typo"
# Commit 4 - Add another author
echo "- Jane Smith (jane@example.com)" >> AUTHORS.md
git add AUTHORS.md
git commit -m "Add second author"Step 2: View the messy history
git log --oneline -4What to observe: Multiple small commits that should be combined
Step 3: Start interactive rebase
git rebase -i HEAD~4Step 4: In the editor, change to:
pick a1b2c3d Add authors file
fixup d4e5f6g Add author
fixup h7i8j9k Fix email typo
pick l0m1n2o Add second author
Step 5: Save and close editor
Step 6: Verify clean history
git log --oneline -2Expected Result: Only 2 commits instead of 4!
Option 1: Continue Rebase After Resolving Conflicts
git rebase --continue- Used after fixing merge conflicts during rebase
- Proceeds to next commit in the rebase
Option 2: Abort Rebase
git rebase --abort- Cancels rebase and returns to state before rebase
- Safe escape if things go wrong
Option 3: Skip Current Commit
git rebase --skip- Skips the current commit during rebase
- Use if the commit is no longer needed
Option 4: Rebase onto Different Branch
git rebase --onto main feature-old feature-new- Rebases
feature-newontomain, removingfeature-oldcommits - Advanced usage for complex branch management
Option 5: Autosquash
# First, create fixup commit
git commit --fixup a1b2c3d
# Then rebase with autosquash
git rebase -i --autosquash main- Automatically arranges fixup commits next to their targets
- Saves manual editing in interactive rebase
Use Rebase When:
- ✅ Working on a feature branch (before sharing)
- ✅ Want a linear, clean history
- ✅ Preparing commits for a pull request
- ✅ Commits are only local (not pushed)
Use Merge When:
- ✅ Working on shared/public branches
- ✅ Want to preserve complete history
- ✅ Commits already pushed to remote
- ✅ Multiple people are working on the same branch
NEVER rebase commits that have been pushed to a shared branch!
# ❌ DANGEROUS - Don't do this!
git checkout main
git rebase feature-branch # If main is shared
# ✅ SAFE - Do this instead
git checkout feature-branch
git rebase main # Rebase your private branchWhy? Rebasing rewrites commit history. If others have based work on those commits, their repositories will be broken.
Scenario: Conflicts occur during rebase
Step 1: Rebase and encounter conflict
git rebase mainOutput:
CONFLICT (content): Merge conflict in AUTHORS.md
error: could not apply a1b2c3d... Add authors file
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
Step 2: View conflicted files
git statusStep 3: Open and resolve conflicts in your editor
<<<<<<< HEAD
# Project Contributors
- Alice Johnson (alice@example.com)
=======
# Project Authors
- John Doe (john@example.com)
>>>>>>> a1b2c3d (Add authors file)
Step 4: Mark as resolved
git add AUTHORS.mdStep 5: Continue rebase
git rebase --continueStep 6: If more conflicts, repeat steps 3-5. Otherwise, rebase completes!
-
Always backup before rebasing
git branch backup-feature-add-authors git rebase main
-
Rebase frequently
- Pull and rebase regularly to avoid large conflicts
git pull --rebase origin main
-
Use interactive rebase before pull requests
- Clean up commits
- Combine related changes
- Fix commit messages
-
Test after rebasing
- Run tests to ensure nothing broke
- Verify functionality still works
Objective: Use GitHub CLI for command-line operations.
Download from cli.github.com
gh auth logingh issue create --title "Add export feature" --body "Users should be able to export tasks to CSV"gh pr create --title "Add export feature" --body "Implements CSV export functionality"gh issue listAfter completing all exercises, you should be able to:
- Install and configure Git
- Initialize a repository
- Use
git status,git add,git commit - View commit history with
git log - Understand the staging area
- Use
git diffto see changes - Stash and restore work in progress
- Create a GitHub repository
- Connect local and remote repositories
- Push and pull changes
- Create and switch branches
- Merge branches
- Resolve merge conflicts
- Delete branches
- Create and manage issues
- Create pull requests
- Review code in PRs
- Comment on specific lines
- Merge pull requests
- Manage notifications
- Use GitHub Discussions
Objective: Learn to organize and track work using GitHub Projects.
What are GitHub Projects? Projects are customizable, flexible tools for planning and tracking work. Think of them as Kanban boards, roadmaps, or task trackers integrated with your repository.
Option A: Repository Project
- Go to your repository on GitHub
- Click "Projects" tab
- Click "Link a project" → "New project"
- Choose template:
- Board: Kanban-style columns (Recommended for beginners)
- Table: Spreadsheet view
- Roadmap: Timeline view
- Select "Board"
- Name:
Task Manager Development - Click "Create"
What to observe: A board with default columns (Todo, In Progress, Done)
- Click the board name to open it
- Add a column: Click "+ Add column"
- Name:
Backlog - Move it to the left of "Todo"
- Name:
- Add another column:
- Name:
Ready for Review - Place between "In Progress" and "Done"
- Name:
Your board now has: Backlog → Todo → In Progress → Ready for Review → Done
Method 1: From the Project Board
- In the "Backlog" column, click "+ Add item"
- Type
#to see existing issues - Select issue #1 "Add task categories feature"
- Add more issues to appropriate columns
Method 2: From an Issue
- Open an issue
- Right sidebar → Click "Projects"
- Select your project
- Issue appears in the default column
-
Drag and drop issues between columns
- Move "Add task categories feature" from Backlog → Todo
- When you start working, drag to "In Progress"
- After creating a PR, drag to "Ready for Review"
- When merged, drag to "Done"
-
Add notes (cards without issues):
- Click "+ Add item" in a column
- Type a note: "Research best practices for task management"
- Press Enter
Add custom fields:
- Click "•••" (project menu) → Settings
- Scroll to "Fields"
- Click "+ New field"
- Name:
Priority - Type: Single select
- Options: High, Medium, Low
- Name:
- Add another field:
- Name:
Effort - Type: Number
- Description: Story points or hours
- Name:
Use fields:
- Click on a card in your project
- Set Priority: High
- Set Effort: 5
Filter and sort:
- Click "Filter" at the top
- Filter by:
Priority: High - Click "Sort" → Sort by: Effort
Create different views for different purposes:
- Click "•••" → "New view"
- Choose "Table" view
- Name:
All Tasks Table - See all items in spreadsheet format
Create a roadmap view:
- Click "•••" → "New view"
- Choose "Roadmap"
- Name:
Development Timeline - Set start/end dates on issues to see timeline
Set up automation:
- Click "•••" → "Workflows"
- Enable built-in automations:
- ✅ Item added to project: Move to "Todo"
- ✅ Item reopened: Move to "Todo"
- ✅ Item closed: Move to "Done"
- ✅ Pull request merged: Move to "Done"
What this does: Issues automatically move between columns based on their status!
If you have multiple repositories:
- Open your project
- Click "+ Add item"
- Type
#and select from any of your repositories - Manage work across multiple repos in one project!
Objective: Learn effective project management patterns.
Columns:
- Backlog
- Sprint Ready
- In Progress
- Code Review
- Testing
- Done
Workflow:
- All new issues go to Backlog
- During sprint planning, move selected items to "Sprint Ready"
- Team members pull from "Sprint Ready" to "In Progress"
- Follow through each stage
Custom fields:
- Status: Not Started, In Progress, Blocked, Completed
- Team: Frontend, Backend, Design, QA
- Sprint: Sprint 1, Sprint 2, Sprint 3
- Size: S, M, L, XL
Views:
- Board view: Group by Status
- Table view: Filter by Team
- Roadmap view: Timeline by Sprint
Columns:
- New Bugs
- Triaged
- High Priority
- In Progress
- Fixed
- Verified
Labels to use:
bug,critical,low-priority,needs-reproduction
| Feature | Purpose | Best For |
|---|---|---|
| Issues | Individual tasks, bugs, features | Tracking specific work items |
| Milestones | Group issues toward a goal/release | Release planning, version targets |
| Projects | Visual organization and workflow | Sprint planning, Kanban workflow, cross-repo tracking |
Use together:
- Create issues for each task
- Group related issues in a milestone (e.g., "v2.0")
- Organize all work visually in a project board
- Track progress across all three!
For Solo Developers:
Backlog → Todo → Doing → Done
For Small Teams:
Backlog → Ready → In Progress → Review → Testing → Done
For Larger Teams:
Ideas → Backlog → Planned → In Development → Code Review → QA → Staging → Production
- Practice regularly: The best way to learn Git is by using it daily
- Explore GitHub features: Projects, Actions, Wikis, etc.
- Contribute to open source: Find beginner-friendly projects
- Learn advanced topics: Rebasing, cherry-picking, submodules
- Automation: GitHub Actions for CI/CD
Problem: fatal: not a git repository
- Solution: Run
git initin the correct directory
Problem: fatal: remote origin already exists
- Solution: Use
git remote set-url origin <url>instead
Problem: Authentication failed
- Solution: Use Personal Access Token instead of password
Problem: Merge conflicts
- Solution: Edit files to resolve conflicts, then
git addandgit commit
This demo project is for educational purposes.
Happy Learning! 🚀