Git 2026

فصل ۱ · معرفی Git و نقشه راه

معرفی Git و نقشه راه ۲۰۲۶ — از صفر تا Senior

Git ابزار ثبت تاریخچهٔ کد است؛ هر کامیت یک عکس کامل از پروژه در آن لحظه است. VS Code و GitHub ظاهر این ابزارند — مغز کار همان Git روی رایانهٔ توست.

🎯 اهداف یادگیری این فصل

بعد از این فصل، بدون ابهام می‌توانی بگویی:

  • Git چیست (برنامه روی رایانهٔ تو) و GitHub چیست (سایت میزبانی)
  • چرا به‌جای کپی‌کردن پوشه، از Git استفاده می‌کنیم
  • کامیت، شاخه و «عکس لحظه‌ای» یعنی چه
  • این کتاب را با چه ترتیبی بخوانی

🤔 چرا Git مهارت شغلی است؟

در آگهی‌های ۲۰۲۶ تقریباً هیچ نقش نرم‌افزاری بدون Git وجود ندارد. اما شرکت‌های خوب دیگر نمی‌پرسند «تفاوت pull و fetch چیست؟» — مدل ذهنی می‌پرسند:

«اگر روی main مشترک rebase کنی چه فاجعه‌ای رخ می‌دهد؟» «چطور یک باگ را با bisect در تاریخچهٔ ده هزار کامیتی پیدا می‌کنی؟» «Ruleset با Branch Protection چه فرقی دارد؟»

این کتاب برای همان سطح نوشته شده است.

سه قطعه که تا آخر کتاب تکرار می‌شوند

تا فصل ۶ همین‌ها را با مثال می‌بینی. الان فقط معنی‌شان را بدان:

  1. کامیت (commit) — یک عکس ثبت‌شده از همه فایل‌های پروژه در یک لحظه، نه فقط فهرست خطوط عوض‌شده.
  2. شاخه (branch) — یک برچسب روی یک کامیت. پوشه را کپی نمی‌کند؛ فقط می‌گوید «الان این عکس، نوک کار ماست».
  3. سه درخت — (الف) فایل‌هایی که در ادیتور می‌بینی، (ب) پیش‌نویس کامیت بعدی، (ج) آخرین عکس ثبت‌شده.

هر فرمان 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 می‌گویند. شاخه فقط نام روی یکی از دایره‌هاست.

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 و امضای کامیت — تا هویت تو در تاریخچه درست ثبت شود.

فصل ۱ از ۳۶ · مرجع جامع و حرفه‌ای Git و GitHub · ویرایش 1.0.0