در این فصل یک پوشه را به مخزن Git تبدیل میکنی، دو کامیت با پیام روشن مینویسی، و با log میبینی تاریخچه دقیقاً چه شکلی شده.
🎯 اهداف یادگیری
- مخزن را از صفر با
git initیا از VS Code بسازی - پیام کامیت خوب بنویسی
logرا با گراف بخوانی- تفاوت
--allow-emptyو کامیت واقعی را بدانی
🚀 ساخت مخزن
روش ۱ — ترمینال (پایه)
mkdir git-lab && cd git-lab git init -b main # Initialized empty Git repository in .../.git/ echo "# Git Lab" > README.md git add README.md git status git commit -m "chore: bootstrap repository"
پرچم -b main شاخهٔ پیشفرض را master نمیگذارد. اگر فراموش کردی: git config --global init.defaultBranch main.
روش ۲ — VS Code (توصیهٔ این کتاب)
- پوشه را با File → Open Folder باز کن
- نوار کناری آیکون Git را بزن (
Ctrl+Shift+G) - دکمهٔ Initialize Repository
- فایل بساز، در Changes ظاهر میشود
- پیام را بنویس و
Ctrl+Enter
اگر پنل خالی دیدی و دکمهٔ Initialize نبود، یا پوشه Git ندارد یا Git در PATH نیست.
✍️ پیام کامیت — قرارداد این کتاب
از Conventional Commits استفاده میکنیم (فصل ۲۲ عمیق میشود):
type(scope): summary بدنهٔ اختیاری — چرا، نه چه.
انواع رایج: feat، fix، docs، chore، refactor، test، ci.
feat(auth): add refresh-token rotation
چرا: نوع + محدوده + فعل امری + نتیجه.
update یا fix bug یا asdf
تاریخچهٔ بیمعنی، git log را به زبالهدان تبدیل میکند.
در VS Code پیام را در جعبهٔ بالا مینویسی. Ctrl+Enter کامیت میکند. اگر Smart Commit روشن باشد و چیزی stage نشده باشد، همه چیز را قورت میدهد — در فصل ۲ آن را خاموش کردیم.
📜 خواندن تاریخچه
git log --oneline --decorate --graph --all git log -1 -p # آخرین کامیت + diff git show HEAD # معادل بالا git log --author="rezaian" --since="2 weeks ago" git shortlog -sn # چه کسی چقدر کامیت کرده
در VS Code:
- Timeline زیر فایل → تاریخچهٔ همان فایل
- Git Graph / GitLens → کل DAG
- کلیک روی کامیت در Source Control → جزئیات
🔬 داخل .git چه خبر است؟
ls .git # HEAD config description hooks info objects refs cat .git/HEAD # ref: refs/heads/main cat .git/refs/heads/main # 9f3a1c... ← هش کامیت فعلی
هنوز لازم نیست packfile را بفهمی (فصل ۳۰). فقط بدان: هر چیز ماندگار اینجاست؛ پاک کردن .git یعنی قتل تاریخچه.
اگر همین الان پیام را غلط نوشتی و هنوز push نکردهای:
git commit --amend -m "docs: fix readme title"
در VS Code: تیک Amend کنار دکمهٔ Commit (منوی کشویی ✓).
--amend هش را عوض میکند. اگر دیگران آن کامیت را گرفتهاند، تاریخچه دوپاره میشود. قانون: فقط کامیت محلیِ pushنشده.
Junior — git init چه میسازد؟ پوشهٔ .git با HEAD، objects، refs و config.
Mid — چرا پیام امری مینویسیم؟ کامیت را مثل وصله بخوان: «این وصله refresh-token را اضافه میکند.» نه «اضافه کردم.»
Senior — تفاوت git log -p و git show؟ show یک شیء را نمایش میدهد؛ log -p پیمایش تاریخچه با diff هر کامیت است.
✅ چکلیست فهم
- مخزن با شاخهٔ
mainساختهای - حداقل دو کامیت Conventional داری
git lg(یا alias) گراف را نشان میدهد- میدانی
.gitقلب مخزن است
فصل بعد: اشیای Git — blob، tree، commit و جادوی hash.