این آزمون دو بخش اول دوره (مبانی و شاخهها) را با ۲۵ سؤال سناریویی میسنجد. بعد از هر پاسخ، جواب درست و توضیح را میبینی و نتیجهی نهایی در پیشرفت من ذخیره میشود. نمرهی ۲۰ از ۲۵ یا بیشتر یعنی آمادهای سراغ کار با GitHub بروی؛ پایینتر از آن، درسهایی را که سؤالهایشان را غلط زدی مرور کن.
؟ آزمون میانهی دورهی Git
GitHub یک روز در دسترس نیست. با یک مخزن کلونشده روی کامپیوترت چه کارهایی هنوز ممکن است؟
Git توزیعشده است؛ هر کلون تاریخچهی کامل دارد.
در خروجی git status -s این خط را میبینی: «MM app.py». یعنی چه؟
برای ثبت آخرین ویرایش باید دوباره add کنی.
فایلی را با rm پاک کردهای. کدام دستور حذف را برای commit بعدی آماده میکند (بههمراه بقیهی تغییرها)؟
git rm فایل هم همین کار را میکند. -u فقط فایلهای شناختهشده را در بر میگیرد، که حذف هم از آن است.
user.email را هم در ~/.gitconfig و هم در .git/config تنظیم کردهای. داخل آن مخزن کدام استفاده میشود؟
اختصاصیتر برنده است: local ← global ← system.
تفاوت «/build» و «build» در .gitignore؟
/ اول مسیر را به ریشه قفل میکند؛ / آخر فقط پوشه.
فایل config.local از اول commit شده؛ بعد به .gitignore اضافهاش کردی ولی Git هنوز تغییرهایش را میبیند. چرا و چه میکنی؟
اگر رمز بود، رمز را هم عوض کن.
یک commit را push کردهای و همکارانت گرفتهاند؛ حالا مشخص شده اشتباه بوده. بهترین کار؟
reset و amend تاریخچه را بازنویسی میکنند؛ revert فقط اضافه میکند.
بعد از git reset --hard HEAD~2 میفهمی دو commit لازم بودند. چطور برشان میگردانی؟
commit های ثبتشده تا مدتی در reflog میمانند.
کدام دستور فقط تغییرهایی را نشان میدهد که با commit بعدی ثبت میشوند؟
git diff بدون آرگومان پوشهی کاری را با staging مقایسه میکند.
git log main..feature چه چیزی را فهرست میکند؟
قدیم..جدید یعنی آنچه در دومی هست و در اولی نیست.
میخواهی بدانی چه commit ای متن «timeout=30» را برای اولین بار به کد اضافه کرده. کدام؟
blame آخرین تغییر هر خط را نشان میدهد، نه اولین ورود را.
main بعد از جداشدن feature هیچ commit جدیدی ندارد و feature سه commit دارد. git merge feature (از main) چه میکند؟
با --no-ff میشود commit ادغام را اجباری کرد.
یک commit ادغام (three-way) چند والد دارد؟
آخر هر دو شاخه؛ git cat-file -p دو خط parent میدهد.
conflict را حل کردهای (علامتها را پاک کردهای). قدم بعدی؟
add یعنی «حل شد»؛ commit ادغام را تمام میکند.
در ادغام، git checkout --ours فایل نسخهی کدام شاخه را میآورد؟
theirs = شاخهی ادغامشده.
کدام دستور علامتهای conflict جامانده را قبل از commit میگیرد؟
بدون آن ممکن است فایلی با <<<<<<< وارد تاریخچه شود.
چرا نباید commit هایی را که قبلاً push و دیگران pull کردهاند rebase کنی؟
قانون طلایی rebase.
سه commit «wip» را میخواهی یکی کنی. در rebase تعاملی فهرست را چطور تغییر میدهی؟
اولین خط باید pick بماند؛ squash با commit قبلی یکی میشود.
بعد از rebase یک شاخهی شخصی که قبلاً push شده، کدام push مناسب است؟
--force-with-lease اگر کس دیگری چیز جدیدی فرستاده باشد رد میکند.
فایل جدید (untracked) داری و میخواهی با بقیهی تغییرها کنار بگذاری. کدام؟
پیشفرض stash فقط فایلهای دنبالشده را میگیرد.
تفاوت git stash pop و git stash apply؟
با conflict، pop هم stash را پاک نمیکند.
پروژهات 2.3.1 است. یک باگ سازگار را درست میکنی و بعد یک ویژگی جدید سازگار اضافه میکنی. نسخهی بعدی (فقط باگ) و بعدیتر (ویژگی)؟
باگفیکس PATCH؛ ویژگی MINOR (و PATCH صفر میشود).
tag ای به اسم v1.0.0 ساختهای ولی همکارت آن را نمیبیند. چرا؟
git ls-remote --tags origin tag های سرور را نشان میدهد.
خروجی «git describe» برابر v1.4.0-5-g3a9f1c2 است. یعنی چه؟
شکل: tag-تعداد-g+هش.
میخواهی روی نسخهی منتشرشدهی v1.2.0 یک رفع باگ بسازی. کدام دستور؟