گیت
Gitبیشتر آدمها Git را با حفظ کردن پنج دستور یاد میگیرند و بعد هر بار که چیزی غیرمنتظره میشود، مخزن را پاک میکنند و از نو clone میگیرند. این مسیر آن پنج دستور را کنار میگذارد و از مدل داده شروع میکند: Git یک گراف از snapshotهاست. وقتی گراف را ببینی، هیچ دستوری دیگر جادو نیست و هیچ خطایی بنبست نیست.
پیشرفت تو
درصد هر فصل از دو چیز میآید: چقدر از بخشهایش را خواندهای (۵۵٪) و چند تمرینش را تیک زدهای (۴۵٪). همهچیز داخل مرورگر خودت میماند.
فصل
فصلها به هم وابستهاند و ترتیبشان معنا دارد. هر مسیر با پروژههای نهایی تمام میشود: ساده، متوسط، پیچیده.
مسئلهای که Git حل میکند
چرا «کپی پوشه با تاریخ» جواب نمیدهد، و کنترل نسخه از کجا آمد.
مدل داده: blob، tree، commit
Git یک پایگاهدادهٔ کلید-مقدار است. همهچیز از اینجا نتیجه میشود.
سه ناحیه: working، staging، repository
چرا staging وجود دارد و چطور درست ازش استفاده کنیم.
خواندن تاریخچه
log، show، diff — و پیدا کردن اینکه چه کسی چه چیزی را کِی عوض کرد.
شاخه: فقط یک اشارهگر
چرا ساختن شاخه در Git تقریباً رایگان است.
merge و حل تعارض
fast-forward، merge commit، و اینکه تعارض واقعاً یعنی چه.
rebase
بازنویسی تاریخچه، و قانون طلاییاش.
مخزن راه دور
fetch در برابر pull، push، و tracking branch.
برگرداندن: reset، revert، restore
سه راه «برگرد عقب» که سه کار متفاوت میکنند.
reflog: تور نجات
ردّ حرکت refها را پیدا کن؛ و مرزهای واقعی بازیابی را بشناس.
stash، cherry-pick، tag
کار نیمهتمام را امن کنار بگذار، hotfix مشخص را انتخابی بیاور و انتشار را با tag دقیق مشخص کن.
bisect: پیدا کردن commit خراب
با آزمون تکرارپذیر، مرز سالم و خراب را در تاریخچه پیدا کن و نتیجه را با patch ثابت کن.
استراتژی شاخهبندی
عمر شاخه، انتشار، CI و نیازهای تیم را بسنج؛ trunk-based، GitHub Flow یا Git Flow را با هزینهها و trade-offهایش انتخاب کن.
کار تیمی: PR و بازبینی کد
commitهای معنادار، توضیح روشن PR، گفتوگوی سازندهٔ review، checkهای CI و انتخاب روش merge با دیدن تاریخچه.
ابزارهای پیشرفته
worktree، submodule، sparse checkout، hook و LFS.
وقتی همهچیز خراب شد
از نشانه تا مدرک و تشخیص: نجات امن refها، commitها و دادهٔ Git، و شناخت مرز چیزی که هرگز ذخیره نشده است.
پروژهٔ ۱ — تاریخچهٔ تمیز
یک مخزن محلیِ آشفته را با staging دقیق و rebase تعاملی به تاریخچهای خوانا تبدیل کن؛ محتوا را با آزمون و مقایسهٔ درخت ثابت کن.
پروژهٔ ۲ — گردش کار تیمی
با bare remote و دو clone، دو feature همزمان را با PR، review، حل تعارض و merge policy یکپارچه کن؛ همگامی آلیس و باب را با شواهد ثابت کن.
پروژهٔ ۳ — نجات مخزن
cloneهای خراب را با reflog، rescue ref، بررسی objectها و نگهداشتن کار همتیمی ترمیم کن؛ تفاوت دادهٔ بازیافتنی و فایلی را که Git ذخیره نکرده با مدرک گزارش بده.