Git ابزار ثبت تاریخچهٔ کد است؛ هر کامیت یک عکس کامل از پروژه در آن لحظه است. VS Code و GitHub ظاهر این ابزارند — مغز کار همان Git روی رایانهٔ توست.
🎯 اهداف یادگیری این فصل
بعد از این فصل، بدون ابهام میتوانی بگویی:
- Git چیست (برنامه روی رایانهٔ تو) و GitHub چیست (سایت میزبانی)
- چرا بهجای کپیکردن پوشه، از Git استفاده میکنیم
- کامیت، شاخه و «عکس لحظهای» یعنی چه
- این کتاب را با چه ترتیبی بخوانی
🤔 چرا Git مهارت شغلی است؟
در آگهیهای ۲۰۲۶ تقریباً هیچ نقش نرمافزاری بدون Git وجود ندارد. اما شرکتهای خوب دیگر نمیپرسند «تفاوت pull و fetch چیست؟» — مدل ذهنی میپرسند:
«اگر روی
mainمشترکrebaseکنی چه فاجعهای رخ میدهد؟» «چطور یک باگ را باbisectدر تاریخچهٔ ده هزار کامیتی پیدا میکنی؟» «Ruleset با Branch Protection چه فرقی دارد؟»
این کتاب برای همان سطح نوشته شده است.
تا فصل ۶ همینها را با مثال میبینی. الان فقط معنیشان را بدان:
- کامیت (commit) — یک عکس ثبتشده از همه فایلهای پروژه در یک لحظه، نه فقط فهرست خطوط عوضشده.
- شاخه (branch) — یک برچسب روی یک کامیت. پوشه را کپی نمیکند؛ فقط میگوید «الان این عکس، نوک کار ماست».
- سه درخت — (الف) فایلهایی که در ادیتور میبینی، (ب) پیشنویس کامیت بعدی، (ج) آخرین عکس ثبتشده.
هر فرمان Git فقط یکی از اینها را عوض میکند. وقتی بپرسی «این فرمان کدام را عوض کرد؟» دیگر مبهم نمیماند.
📖 تاریخچه — از BitKeeper تا Git ۳.۰
- ۲۰۰۵: لینوس توروالدز Git را در دو هفته ساخت؛ هستهٔ لینوکس دیگر نمیتوانست به BitKeeper تکیه کند.
- ۲۰۰۸: GitHub متولد شد و «اجتماع روی کد» را ساخت؛ Fork و Pull Request زبان مشترک صنعت شد.
- ۲۰۱۹:
git switchوgit restoreآمدند تاcheckoutدوچهره را بشکنند. - ۲۰۲۵ (Git ۲.۵۱):
switchوrestoreدیگر آزمایشی نیستند؛ reftable و SHA-256 برای مخازن جدید آمادهاند. - ۲۰۲۶: Git ۳.۰ در افق است — پاکسازی فرمانهای قدیمی، hash پیشفرض SHA-256، و backend سریعتر برای میلیونها ref.
- گیتهاب ۲۰۲۵–۲۰۲۶: Rulesets، Immutable Releases، Copilot Coding Agent، Agent HQ، و Actions تو در تو.
برای عوض کردن شاخه هرگز checkout نمینویسیم: git switch شاخه، git restore فایل.
هر مهارت را دو بار میبینی: فرمان در ترمینال و دکمه در VS Code (پنل Source Control و افزونهٔ GitHub Pull Requests). مفهوم را در ترمینال بفهم؛ کار روزانه را در VS Code انجام بده.
🔬 Git چه چیزی نیست؟
| تصور غلط | واقعیت روشن |
|---|---|
| Git همان GitHub است | Git برنامهٔ روی رایانهٔ توست. GitHub فقط یکی از سایتهای میزبان است (GitLab و Gitea هم هستند). بدون اینترنت هم Git کار میکند. |
| Git فقط پشتیبان فایل است | Git علاوه بر فایل، چرا عوض شد (پیام کامیت) و چه کسی / کی را هم نگه میدارد. |
| شاخه = کپی کل پروژه | شاخه یک برچسب کوتاه روی یک کامیت است؛ ساختنش آنی است و پوشه را دوبرابر نمیکند. |
| کامیت = فقط diff | کامیت یک snapshot است: عکس کامل درخت فایلها در آن لحظه. Diff بعداً از مقایسهٔ دو عکس بهدست میآید. |
شکل ۱ — هر دایره یک کامیت است. پیکان به کامیت قبلی (والد) میرود. حلقه وجود ندارد؛ به این گراف DAG میگویند. شاخه فقط نام روی یکی از دایرههاست.
DAG یعنی Directed Acyclic Graph: گراف جهتدار بدون دور. اگر این یک جمله را حفظ کنی، merge (دو والد) و rebase (گرههای جدید) دیگر رمز نیستند.
🗺️ اکوسیستم ۲۰۲۶ — چه چیزی یاد بگیریم؟
| لایه | انتخاب ۲۰۲۶ | چرا؟ | جایگزین |
|---|---|---|---|
| VCS | Git ۲.۵۱+ | switch/restore پایدار، reftable | Mercurial فقط میراث |
| Host | GitHub | PR، Actions، Security، Copilot | GitLab / Gitea |
| ادیتور | VS Code + GitHub Pull Requests | Source Control، Graph، Review داخل IDE | JetBrains / Neovim |
| CLI همراه | GitHub CLI (gh) |
PR، Issue، Actions از ترمینال | hub قدیمی |
| کیفیت کامیت | Conventional Commits | changelog خودکار، semantic release | پیام آزاد |
| CI | GitHub Actions | OIDC، reusable workflow | Jenkins میراث |
| امنیت | Rulesets + signing + CodeQL | سیاست متمرکز، عرضهٔ قابلاثبات | فقط branch protection کلاسیک |
🧠 چگونه این کتاب را بخوانیم؟
۱. فرمان را حفظ نکن — بپرس کدام لایه عوض شد
بعد از هر فرمان از خودت بپرس: فایل روی دیسک عوض شد، پیشنویس کامیت عوض شد، یا تاریخچهٔ ثبتشده؟ (اسامی دقیق این سه لایه در فصل ۳ است.)
۲. ترمینال و VS Code را با هم یاد بگیر
تقریباً هر کار دو شکل دارد: یک فرمان و یک دکمه. اگر فقط یکی را بلد باشی، در تیم گیر میکنی.
۳. عمداً خراب کن — برگشت دارد
حذف تاریخچهٔ ثبتشده سخت است، ولی حرکت اشتباه HEAD معمولاً تا حدود ۹۰ روز در reflog مانده. فصل ۸ دقیقاً میگوید کدام Undo کدام لایه را لمس میکند.
هفته ۱: فصل ۱–۱۰ — مدل ذهنی + Source Control از صفر (Ctrl+Shift+G)
هفته ۲: فصل ۱۱–۲۲ — همکاری واقعی روی GitHub
هفته ۳: فصل ۲۳–۳۲ — rebase، Actions، امنیت
هفته ۴: فصل ۳۳–۳۶ — کارگاه، اشتباهات، مصاحبه
- میتوانی مدل را روی کاغذ بکشی؟
- میتوانی همان کار را در VS Code انجام دهی؟
- میتوانی بگویی کدام فرمان تاریخچه را بازنویسی میکند؟
- میتوانی در مصاحبه ۲ دقیقه توضیح دهی؟
Junior — Git و GitHub چه فرقی دارند؟ Git موتور نسخهبندی توزیعشده روی ماشین توست. GitHub سرویس میزبانی، PR، Issue، Actions و هویت تیمی است.
Mid — چرا Git معمولاً از SVN سریعتر حس میشود؟ چون کل تاریخچه روی رایانهٔ توست و هر فایل با هش محتوایش شناخته میشود. شبکه فقط وقتی لازم است که بخواهی با دیگران همگام شوی — نه برای هر مقایسه.
Senior — DAG یعنی چه و چرا مهم است؟ تاریخچه یک خط نیست؛ یک گراف است. Merge کامیتی با دو والد میسازد. Rebase کامیتهای جدید میسازد (هش عوض میشود). اگر گراف را ببینی، میفهمی چرا force-push روی main کار دیگران را میشکند.
✅ جمعبندی و اتصال
- Git روی رایانهٔ تو تاریخچه را با عکس لحظهای و برچسب شاخه نگه میدارد.
- GitHub میزبان + صفحهٔ PR + قوانین تیم + اجرای خودکار تست است.
- مسیر این کتاب:
switch/restore، VS Code، بعد GitHub، بعد امنیت و CI.
فصل بعد: نصب Git، نام و ایمیل، کلید SSH و امضای کامیت — تا هویت تو در تاریخچه درست ثبت شود.