Learn Git by using Git.
نه با حفظ کردن دستورها؛ با دیدن مسئله، تشخیص وضعیت و انتخاب تصمیم درست.
[!IMPORTANT] این Repo برای حفظکردن دستورهای Git ساخته نشده.
هر مرحله اول یک مسئلهی واقعی و قابلفهم ایجاد میکند؛ بعد Git بهعنوان راهحل وارد داستان میشود.
Problem → Inspect → Decide → Change → Verify → Commit → Share → Review → Recover
اگر بعد از این دوره فقط دستورها را حفظ کرده باشی، هدف اصلی را از دست دادهای.
اگر بتوانی قبل از زدن هر دستور توضیح بدهی الان Repository در چه وضعیتی است و میخواهی چه چیزی را تغییر بدهی، مسیر را درست رفتهای.
شما به یک گروه کوچک کمک میکنید که یک راهنمای عمومی شهر را نگهداری میکند.
پروژه نه بکاند دارد، نه فرانتاند، نه فریمورک خاص. فقط چند فایل Markdown ساده:
city-guide/
├── README.md
├── places/
│ ├── cafes.md
│ ├── parks.md
│ └── museums.md
├── tips/
│ ├── transportation.md
│ └── budget.md
└── contributors.md
بنابراین اگر کسی هنوز برنامهنویسی بلد نباشد هم میتواند تمام تمرکز خود را روی Git بگذارد.
[!NOTE] ساده بودن فایلها عمدی است. پیچیدگی این دوره باید از تصمیمگیری در Git بیاید، نه از زبان برنامهنویسی یا Framework.
flowchart LR
A["Clone"] --> B["Status & Diff"]
B --> C["Stage & Commit"]
C --> D["History"]
D --> E["Branch"]
E --> F["Atomic Commits"]
F --> G["Push"]
G --> H["Pull Request"]
H --> I["Review & Sync"]
I --> J["Conflict & Revert"]
| مرحله | نام مأموریت | مفهوم اصلی |
|---|---|---|
| 01 | اولین روز | clone / local / remote / origin |
| 02 | یک اشتباه کوچک | status / diff / working tree |
| 03 | همهچیز را Commit نکن | staging / add / commit |
| 04 | چه کسی این را تغییر داد؟ | log / show / hash |
| 05 | امن کار کن | branch / main / switch |
| 06 | تاریخچه را تمیز نگه دار | atomic commit / commit message |
| 07 | کارت را با تیم به اشتراک بگذار | push / upstream / remote branch |
| 08 | درخواست بررسی بده | Pull Request / review / merge |
| 09 | با تغییرات دیگران هماهنگ شو | pull / fetch / cleanup |
| 10 | وقتی همهچیز طبق برنامه نیست | conflict / revert |
| 🏁 | Final Mission | اجرای مستقل Workflow کامل |
- فایل
START-HERE.mdرا بخوان. - قوانین دوره را در
RULES.mdببین. - از
missions/01-first-day/README.mdشروع کن. - بعد از پایان هر مرحله، نتیجه را در
PROGRESS.mdثبت کن. - اگر گیر کردی، Hintهای همان مرحله را بهترتیب باز کن؛ مستقیم سراغ جواب آخر نرو.
- بعد از ۱۰ مرحله، وارد
final-mission/README.mdشو.
[!TIP] اگر وسط مسیر یک اصطلاح یادت رفت، اول
GLOSSARY.mdرا ببین.
اگر مفهوم را میدانی ولی Syntax دستور یادت نیست، آن وقتCHEATSHEET.mdرا باز کن.
در پایان باید بتوانی بدون نگاهکردن به Cheat Sheet توضیح بدهی:
- Repository چیست؟
- Local و Remote چه فرقی دارند؟
originچیست؟- Clone چه تفاوتی با Download ZIP دارد؟
- Working Directory چیست؟
- Stage کردن یعنی چه؟
- چرا
git add .همیشه انتخاب خوبی نیست؟ - Commit خوب چه ویژگیای دارد؟
- Branch برای چه ساخته میشود؟
- Push با Commit چه فرقی دارد؟
- Pull با Fetch چه فرقی دارد؟
- Pull Request دستور Git است یا Workflow تیمی؟
- Merge چیست؟
- Conflict چرا رخ میدهد؟
- Revert چرا برای تاریخچهی مشترک امنتر از دستکاری History است؟
وقتی git status میزنی، صرفاً خروجی را نخوان. از خودت بپرس:
«Git الان چه چیزی را دربارهی Working Tree، Staging Area و HEAD به من میگوید؟»
همین سؤال کوچک، مرز بین Command User و کسی است که Git را واقعاً میفهمد.
git-internship-fa/
├── README.md
├── START-HERE.md
├── RULES.md
├── PROGRESS.md
├── GLOSSARY.md
├── CHEATSHEET.md
├── CONTRIBUTING.md
│
├── .github/
│ └── PULL_REQUEST_TEMPLATE.md
│
├── docs/
│ ├── WORKFLOW.md
│ ├── COMMIT-GUIDE.md
│ ├── PR-GUIDE.md
│ └── CONFLICT-GUIDE.md
│
├── city-guide/
│ ├── README.md
│ ├── contributors.md
│ ├── places/
│ │ ├── cafes.md
│ │ ├── parks.md
│ │ └── museums.md
│ └── tips/
│ ├── transportation.md
│ └── budget.md
│
├── missions/
│ ├── 01-first-day/
│ ├── 02-small-mistake/
│ ├── 03-not-everything/
│ ├── 04-who-changed-this/
│ ├── 05-work-safely/
│ ├── 06-clean-history/
│ ├── 07-share-your-work/
│ ├── 08-ask-for-review/
│ ├── 09-work-with-others/
│ └── 10-when-things-go-wrong/
│
├── final-mission/
│ └── README.md
│
└── mentor/
├── README.md
├── ANSWER-KEY.md
├── EVALUATION.md
├── MISSION-CHECKLIST.md
├── SCENARIO-SETUP.md
└── PUBLISH.md
[!CAUTION] پوشهی
mentor/برای مربی است. اگر کارآموز هستی، باز کردن Answer Key قبل از تلاش واقعی چیزی را «سریعتر» نمیکند؛ فقط مرحلهای را که قرار بوده مغزت انجام دهد Skip میکند.
اگر در طول مسیر نیاز به مرور مفهوم داشتی:
docs/WORKFLOW.md— چرخهی روزمره Gitdocs/COMMIT-GUIDE.md— Commit تمیز و Atomicdocs/PR-GUIDE.md— Pull Request قابل Reviewdocs/CONFLICT-GUIDE.md— فهم و حل Conflict
در این Repo سه قانون ذهنی از خود دستورها مهمترند:
1. Before change → Know where you are.
2. Before commit → Know what you are committing.
3. Before publish → Know what other people will receive.
[!TIP] حرفهایها کمتر اشتباه نمیکنند؛ بیشتر قبل از حرکت وضعیت را Inspect میکنند و وقتی اشتباه میکنند، Recovery Path را میشناسند.
هدف نهایی این نیست که کارآموز بتواند ۲۰ دستور را از حفظ بنویسد.
هدف این است که وقتی فقط یک Task دریافت میکند، خودش این مسیر را تشخیص دهد:
sync main
↓
create branch
↓
make focused change
↓
inspect diff
↓
stage intentionally
↓
commit clearly
↓
push branch
↓
open PR
↓
handle review
↓
merge
↓
sync local main
↓
cleanup
Git بیشتر از اینکه «سیستم ذخیرهی فایل» باشد، یک مدل تاریخچه و Snapshot است.
وقتی این جمله را واقعاً بفهمی، خیلی از چیزهایی که اول عجیب به نظر میرسند — Branch، Merge، Revert، Detached HEAD و حتی Conflict — قابل پیشبینیتر میشوند.
Don't memorize Git. Build a mental model of Git.
اصل دوره:
«اول مسئله را بفهم، بعد دستور Git را انتخاب کن.»
██████╗██╗ ██╗██████╗ ███████╗██████╗ ███╗ ██╗██╗████████╗██╗ ██╗
██╔════╝╚██╗ ██╔╝██╔══██╗██╔════╝██╔══██╗████╗ ██║██║╚══██╔══╝██║ ██║
██║ ╚████╔╝ ██████╔╝█████╗ ██████╔╝██╔██╗ ██║██║ ██║ ███████║
██║ ╚██╔╝ ██╔══██╗██╔══╝ ██╔══██╗██║╚██╗██║██║ ██║ ██╔══██║
╚██████╗ ██║ ██████╔╝███████╗██║ ██║██║ ╚████║██║ ██║ ██║ ██║
╚═════╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝ ╚═╝
C Y B E R N I T H
Crafted & maintained by Soroosh Morshedi
🌐 sorooshmorshedi.ir · Instagram @cybernith · LinkedIn sorooshMorshedi
Built with curiosity, discipline, and a suspiciously large amount of Git history.