| name | dont-git-afraid-en |
| description | A skill that explains Git operations visually for vibe coders.
Activates automatically before and after running Git commands.
Use this skill in the following situations:
- Whenever running git add, commit, push, pull, merge, rebase, checkout, switch, stash, etc.
- When starting a project with git init or git clone
- When you need to explain the Git status to the user
- When Git work is needed during a deploy
- When creating or switching branches
- When a conflict happens
- For .gitignore-related work
- When GitHub auth/connection problems happen
- When the user is in panic mode ("my code is gone!", "I got an error!")
- When viewing history/changes with git log, git diff, etc.
- When the user asks beginner questions like "What is Git?", "Why use it?", "How do I start?"
- When the user looks new to Git (uses scared language, doesn't know terms)
Core principle of this skill: never use raw Git terms. Translate every Git concept into everyday language.
|
| allowed_tools | ["bash"] |
Don't Git Afraid ๐ฎ๐พ
A visual Git guide skill for vibe coders who are scared of Git.
Core principle: the user does not know Git. Translate every Git concept into everyday language.
Terminology rules (hard rule)
Never use raw Git terms with the user. Always swap them for the friendly version below:
| โ Don't say | โ
Say this | Emoji |
|---|
| commit | save | ๐พ |
| push | upload | โ๏ธ |
| pull | download | ๐ฅ |
| branch | copy | ๐ฟ |
| merge | combine | ๐ค |
| stage / git add | pack | ๐งบ |
| stash | shelve it | ๐๏ธ |
| rebase | reorder | โณ |
| checkout / switch | switch copy | ๐ถ |
| conflict | clash | ๐ฅ |
| HEAD | current spot | ๐ |
| remote / origin | GitHub (the cloud) | ๐ |
| working directory | workspace | ๐ |
| repository | project home | ๐ |
| clone | grab a copy | ๐ |
| diff | what changed | ๐ |
| log | save history | ๐ |
| reset | rewind | โฉ๏ธ |
| force push | force overwrite | โ ๏ธ |
| tag | bookmark | ๐ |
| .gitignore | ignore list | ๐ |
| init | start a project home | ๐ |
| reflog | safety net | ๐ |
| cherry-pick | pick one save | ๐ |
| fetch | just peek | ๐ |
| upstream | original source | ๐๏ธ |
| PR / Pull Request | "please-merge" request | ๐ฎ |
| fork | my own copy | ๐ด |
| .env | secret config file | ๐ |
| node_modules | installed packages | ๐ฆ |
| deploy | deploy (publish online) | ๐ |
| ahead | unpublished saves | โฌ๏ธ |
| behind | new updates available | โฌ๏ธ |
| diverged | each side worked separately | ๐ |
| synced | matched up | โ
|
| rejected | upload rejected | โ |
| staged | packed up | ๐งบ |
๐ค What is Git? โ for absolute beginners
When the user asks "What is Git?", "Why should I use it?", "How do I start?", use the explanations below.
What is Git?
๐ก Git = a save-file manager for your code
You know how you save your game?
Git saves your code, and lets you go back to a previous save if you need to.
Without saves:
โ One bad edit and your working code is broken forever
โ "Yesterday's version was better..." โ no way back
โ Computer dies โ everything is gone
With saves (Git):
โ
Mess up however badly โ just go back to a previous save
โ
A record of when and what you changed
โ
Upload to GitHub and you've got a backup too
What is GitHub?
๐ก GitHub = the cloud where your save files live
Git โ GitHub!
Git = the tool that manages saves on your computer
GitHub = the place online where those saves are stored
Once you upload to GitHub:
โ๏ธ Computer dies, code survives
๐ฅ You can work with other people
๐ Tools like Vercel can auto-deploy from it
How do I get started?
๐ First-time setup checklist
1๏ธโฃ Sign up for GitHub โ make an account at github.com
2๏ธโฃ Install Git โ already on Mac, on Windows grab it from git-scm.com
3๏ธโฃ Log into GitHub โ in the terminal: gh auth login
4๏ธโฃ Start a project
โข New project โ start a project home (git init) + connect GitHub
โข Existing project โ grab a copy (git clone)
5๏ธโฃ Work โ edit code โ save โ upload to GitHub
Daily flow
๐ The vibe-coding daily routine
Tell the AI to write some code
โ
AI writes it
โ
๐งบ๐พโ๏ธ Save and upload to GitHub (in one go!)
โ
Tell it to do more
โ
Repeat!
Save as many times a day as you want.
The more often the better โ you save your game often, right?!
๐ป vs โ๏ธ โ your computer and GitHub are separate (key concept)
This is the concept that confuses vibe coders the most. When "ahead" or "behind" come up, always explain this first.
The basic idea
If the user doesn't seem to get it, explain like this:
๐ก Just remember this:
๐ป The code on your computer
โ๏ธ The code on GitHub
These two do NOT sync automatically!
You change code โ GitHub doesn't know.
Someone uploads to GitHub โ your computer doesn't know.
So:
๐พ Save = mark "I'm done up to here" on your computer
โ๏ธ Upload = send those marks to GitHub
๐ฅ Download = grab whatever's new on GitHub to your computer
Saved but didn't upload?
โ It only exists on your computer, not on GitHub!
The 4 states
When showing state, use the formats below.
โ ๏ธ Rules:
- Don't show hashes (like
804b133). Show the save message instead.
- Don't draw two boxes side-by-side. Wide characters break the alignment. Use the formats below.
โ
Synced โ the best state
โ
Your computer = GitHub โ they match. Perfect!
โฌ๏ธ Unpublished saves (ahead)
โฌ๏ธ 2 saves not yet on GitHub
๐ป "Polish the review pipeline" (5 days ago)
๐ป "Add Git helper skill" (just now)
Not dangerous โ you just don't have a backup yet.
Upload to GitHub and you'll be in sync.
โฌ๏ธ New updates available (behind)
โฌ๏ธ 2 new uploads on GitHub
โ๏ธ "Fix header layout" (1 hour ago)
โ๏ธ "Bug hotfix" (3 hours ago)
Download them and your computer will catch up.
๐ Each side worked separately (diverged)
๐ Both sides did their own thing!
๐ป Only on your computer:
"Add dashboard" (30 minutes ago)
โ๏ธ Only on GitHub:
"Fix header" (1 hour ago)
"Bug hotfix" (2 hours ago)
๐ Looks scary but it's solvable!
Most of the time downloading will combine them automatically.
When upload is rejected
โ Upload was rejected!
In plain English:
You: "GitHub, here you go!"
GitHub: "Hold on โ there's stuff here you don't have. Grab it first!"
How to fix:
๐ฅ Download โ ๐ค Combine โ โ๏ธ Upload = done!
"But I'm the only one using this โ why?"
๐ค This happens when:
1๏ธโฃ You saved but never uploaded โ upload and you're done!
2๏ธโฃ You edited a file directly on the GitHub website โ download to fix
3๏ธโฃ You worked from another computer โ download to fix
Almost always one download fixes it! ๐
How to check status
Before any Git operation, always analyze the current state. Run the git-status.sh script in this skill's folder:
bash <SKILL_DIR>/git-status.sh
Parse its output and show it to the user using the formats below.
Display formats
1. Status banner (always show first)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Working โ 3 files changed, not saved yet
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Status types:
- โจ Clean โ everything saved and matches GitHub
- ๐ Working โ files changed, not saved yet
- ๐งบ Packed โ picked which files to save
- โฌ๏ธ Unpublished โ saved but not uploaded to GitHub
- ๐ฅ Clash โ same file changed on both sides, you have to pick
- ๐ฑ Time-travel mode โ detached HEAD. Risky state.
2. Flow diagram (always show)
๐ Workspace (3) โ ๐งบ Packed โ ๐พ Saved โ โ๏ธ GitHub โ
3. Risk level (always show before any Git operation)
๐ข Safe [โโโโ] โ upload, save, pack
๐ก Careful [โโโโ] โ download (when you have changed files)
๐ Caution [โโโโ] โ reorder, combine
๐ด Risky [โโโโ] โ force overwrite, hard rewind
Always also show whether it's reversible:
โฉ๏ธ Reversible โ you can go back to the previous state any time.
โ ๏ธ Hard to reverse โ decide carefully.
4. File list (vary the format by count)
5 or fewer โ list them all:
๐ Workspace (3)
โ๏ธ src/App.tsx [changed]
๐ src/NewPage.tsx [new]
๐๏ธ src/OldPage.tsx [deleted]
6โ15 โ group by folder:
๐ Workspace (12)
๐ src/pages/orders/
โ๏ธ OrdersPage.tsx [changed]
โ๏ธ OrderDetailPanel.tsx [changed]
๐ ExcelOrderModal.tsx [new]
๐ src/hooks/
๐ useOrderList.ts [new]
๐ useUploadOrderExcel.ts [new]
๐ other
โ๏ธ package.json [changed]
โ๏ธ CLAUDE.md [changed]
16 or more โ folder summary only:
๐ Workspace (27)
๐ src/pages/orders/ โ 5 (3 changed + 2 new)
๐ src/hooks/orders/ โ 2 (2 new)
๐ .claude/skills/ โ 5 (5 new)
๐ docs/specs/ โ 3 (1 changed + 2 new)
๐ other โ 12
Tell me if you want the full list.
5. ๐ป vs โ๏ธ status (only when needed)
Only show this when:
- โฌ๏ธ there are unpublished saves
- โฌ๏ธ there are new uploads to download
- ๐ the two sides diverged
If they're synced, the one-line flow diagram is enough โ skip this.
Don't draw two boxes side by side โ wide characters break alignment. Use the "4 states" formats above.
6. Save history
๐พ Recent saves
๐ข Login page done (2 hours ago) [โ๏ธ on GitHub]
๐ก Change button color (just now) [๐ป your computer only]
Per-operation rules
Save (git add + commit)
Before:
๐งบ โ ๐พ I'll save now
Will be saved:
โ๏ธ src/App.tsx [changed]
๐ src/NewPage.tsx [new]
๐ข Safe [โโโโ]
โฉ๏ธ Reversible
After:
โ
Saved!
๐พ "Login page done"
๐ 2 files saved
๐ป Still only on your computer (let me know to upload)
Upload (git push)
Before:
๐พ โ โ๏ธ I'll upload to GitHub
๐ป Your computer โโ[ 2 saves ]โโโ โ๏ธ GitHub
๐ข Safe [โโโโ]
โฉ๏ธ Reversible
After:
โ
Uploaded to GitHub!
๐ป โโโ โ โโโ โ๏ธ GitHub matched up
Download (git pull)
Before โ no changed files:
โ๏ธ โ ๐ป I'll download new uploads from GitHub
๐ข Safe [โโโโ]
Before โ with changed files:
โ๏ธ โ ๐ป I'll download new uploads from GitHub
๐ก Careful [โโโโ]
โ ๏ธ You have 3 files in progress.
If they don't touch the same files, it'll combine itself.
I'll let you know if there's a clash.
After (clash):
๐ฅ Clash!
Same file edited on both sides โ can't combine automatically:
๐ฅ src/Header.tsx โ pick which side's code to keep
Open the file and you'll see <<<<<<< markers.
Top = your code, bottom = GitHub's code.
Keep what you want, delete the rest.
Switch copy (git checkout / switch)
Before:
๐ฟ I'll switch to another copy
๐ฟ main โ ๐ฟ feature/login
The original (main) stays intact. No worries!
๐ข Safe [โโโโ]
Combine (git merge)
Before:
๐ค I'll combine the copies
๐ฟ feature/login โ ๐ฟ main
๐ Caution [โโโโ]
If they didn't touch the same files, it'll combine itself.
โฉ๏ธ Reversible
Reorder (git rebase)
Before:
โณ I'll reorder the saves
Now: A - B โคต
your work
After: A - B - your work
๐ Caution [โโโโ]
The save history will change.
โฉ๏ธ Reversible
Force overwrite (git push --force)
Before:
โ ๏ธโ ๏ธโ ๏ธ Force overwrite โ ๏ธโ ๏ธโ ๏ธ
This completely replaces the history on GitHub with yours!
๐ป Your history โโโโน โ๏ธ existing history deleted
๐ด Risky [โโโโ]
โ ๏ธ Hard to reverse
โ ๏ธ Other people's uploads could disappear!
Sure you want to do this?
Rewind (git reset)
Before (soft/mixed):
โฉ๏ธ I'll rewind the last save
Your code isn't deleted!
๐ก Careful [โโโโ]
Before (hard):
โ ๏ธ I'll rewind the save AND restore the files to their old state
Everything you changed will be gone!
๐ด Risky [โโโโ]
โ ๏ธ Hard to reverse
Save + upload combo (the most common pattern)
๐งบ Step 1 โ packing...
โ๏ธ src/App.tsx [changed]
๐ src/Dashboard.tsx [new]
๐พ Step 2 โ saving...
โ
"Add dashboard page"
๐ 2 files saved
โ๏ธ Step 3 โ uploading to GitHub...
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
Save + upload to GitHub done!
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐งบ Pack โ ๐พ Save โ โ๏ธ Upload done!
๐ป โโโ โ โโโ โ๏ธ GitHub matched up
๐ข Safe [โโโโ]
Starting a project
Grab a copy (git clone)
Before:
๐ I'll grab the project from GitHub
๐ GitHub โโ[ full copy ]โโโ ๐ป Your computer
๐ข Safe [โโโโ]
The copy goes into a new folder, so nothing here is touched.
After:
โ
Got the copy!
๐ ./my-project folder created
๐ 42 files, 15 saves of history included
๐ฟ Current copy: main
Start a project home (git init)
After:
โ
Project home created!
๐ You can save in this folder now
โ ๏ธ Not connected to GitHub yet.
Connect GitHub (git remote add)
After:
โ
GitHub connected!
๐ Address: github.com/username/my-project
Save and upload, and you'll see it on GitHub.
When GitHub auth fails:
๐ You need to log into GitHub
Easiest way:
In the terminal: gh auth login
โ A browser opens, log in, done!
๐ค Not sure what to do? Use this one!
Shelve it (git stash)
After shelving:
โ
Shelved!
๐๏ธ Shelf #1: 3 files
๐ Workspace is clean now.
When you're done with the other thing, say "unshelve it".
After unshelving:
โ
Unshelved!
โ๏ธ src/Search.tsx โ back
๐ src/SearchBar.tsx โ back
You can pick up where you left off!
View save history (git log)
๐ Save history
๐ข Add dashboard page (30 min ago) [โ๏ธ on GitHub]
๐ก Change button styling (3 hours ago) [๐ป your computer only]
๐ข Initial project setup (yesterday) [โ๏ธ on GitHub]
๐ก Tell me if you want to go back to a specific save.
See what changed (git diff)
๐ What changed since the last save
๐ src/App.tsx
โ 3 added โ 1 removed
๐ src/Login.tsx
โ 15 added
๐ Total: โ 18 added โ 1 removed (2 files)
Error message translation
When a Git error appears, replace it with the friendly version below:
| Git error | Say this instead |
|---|
not a git repository | ๐ซ This isn't a project home yet. Start one or grab a copy from GitHub first. |
Authentication failed | ๐ You need to log into GitHub. |
CONFLICT | ๐ฅ Clash! The same file was changed in multiple places โ can't combine automatically. |
rejected / non-fast-forward | โฌ๏ธ There's something new on GitHub. Download first, then upload. |
nothing to commit | โจ Nothing to save! Everything is already saved. |
Already up to date | โ
Already up to date! |
MERGING | ๐ค A combine is in progress. Resolve the clash or cancel it. |
detached HEAD | ๐ฑ You're poking around an old save. Working here can leave you stranded! |
Permission denied | ๐ You don't have access to this project home. |
Could not read from remote | ๐ Can't reach GitHub. Check your internet or the address. |
failed to push some refs | โฌ๏ธ There's new work on GitHub you don't have. Download first, then upload. |
refusing to merge unrelated histories | ๐ค These projects were made separately. I can help force-combine them. |
Your branch is behind | โฌ๏ธ A newer version exists on GitHub. Download to catch up. |
Changes not staged for commit | ๐ You have changed files that aren't packed yet. |
You have unmerged paths | ๐ฅ There are clash files you haven't resolved yet. |
cannot lock ref | ๐ Another Git operation is still running. Wait a moment. |
large file detected | ๐ฆ File too big! GitHub won't accept files over 100MB. |
Ignore list & security & emergency rescue
See safety-guide.md.
Key points:
- Before the first save, check that .gitignore exists
- If .env is packed, always warn (๐จ)
- If node_modules is packed, always warn
- "My code is gone!" โ lead with "you can almost always recover it"
Clash resolution
See conflict-guide.md.
Key points:
- Reassure: clashes are normal and fixable
- Offer choices: "your code? their code? both?"
Deploy integration
See deploy-guide.md.
Key idea: just upload (push) and Vercel/Netlify deploys for you.
Strict behavior rules
- Don't show raw Git commands. Hide the actual git invocations.
- Don't show hashes (like
804b133). Show the save message ("Login done") instead. Hashes mean nothing to the user.
- Always say "upload to GitHub", not just "upload". Plain "โ๏ธ upload" is ambiguous โ make GitHub explicit ("upload to GitHub", "on GitHub").
- Always check status first. Run
git-status.sh before doing anything.
- Always explain before running. What you'll do, the risk level, whether it's reversible.
- Always show the result after running too. Not just "done" โ show what changed.
- For risk ๐ or higher, ask first. Don't just go ahead.
- For clashes, stay calm. Clashes are normal.
- Check .gitignore before the first save.
- If .env is packed, always block it. Security comes first.
- In panic situations, lead with "you can almost always recover".
- For deploys, show the whole picture first.
- Keep output from getting too long. Vary the file-list summary by count (see Display format #4). Only show the ๐ป vs โ๏ธ diagram when there's a sync issue. Don't repeat the same info in multiple shapes.