رفتن به محتوا
LoopX

آزمون بخش ۱: مبانی

این آزمون شش درس بخش «مبانی» را می‌سنجد. جواب هر سؤال همان لحظه با توضیح نشان داده می‌شود و نتیجه‌ات در همین مرورگر ذخیره می‌شود (پیشرفت من).

؟ آزمون بخش ۱
  1. توزیع‌شده بودن Git یعنی چه؟

  2. فرق Git و GitHub؟

  3. اگر پوشه‌ی .git را پاک کنی؟

  4. پیام «Author identity unknown» یعنی چه؟

  5. اگر user.email را هم در ~/.gitconfig و هم در .git/config تنظیم کنی، داخل آن مخزن کدام استفاده می‌شود؟

  6. مسیر درست یک تغییر در Git؟

  7. git add -u چه فایل‌هایی را آماده می‌کند؟

  8. پس از ویرایش فایل، git add و دوباره ویرایش، git status -s چه نشان می‌دهد؟

  9. کدام پیام commit بهتر است؟

  10. git diff --staged چه چیزی را مقایسه می‌کند؟

  11. کدام دستور commit هایی را پیدا می‌کند که متنی را (مثلاً «0.9») به کد اضافه یا از آن حذف کرده‌اند؟

  12. HEAD~2 یعنی؟

  13. git restore --staged فایل چه می‌کند؟

  14. تفاوت reset --soft و --hard؟

  15. یک commit را push کرده‌ای و دیگران گرفته‌اند. حالا اشتباه بودنش مشخص شده. کدام روش امن است؟

  16. بعد از «git reset --hard HEAD~2»، commit های کنار‌گذاشته‌شده را چطور برمی‌گردانی؟

  17. فایل .env را بعد از commit شدن به .gitignore اضافه کردی. چه می‌شود؟

  18. چرا «build/» و سپس «!build/README.md» کار نمی‌کند؟

🏁 چالش: یک پروژه‌ی تمیز با تاریخچه‌ی قابل‌دفاعسخت

با آنچه در این بخش آموختی، یک مخزن تازه بساز و این مراحل را به‌ترتیب انجام بده:

۱. نام و ایمیل و شاخه‌ی پیش‌فرض main را تنظیم کن (git config --global)، یک مخزن به نام quiz1 بساز و قبل از هر چیز یک .gitignore بنویس که node_modules/، *.log و .env را نادیده بگیرد؛ همان را commit کن. ۲. فایل‌های app.js، .env (یک رمز ساختگی)، node_modules/x/index.js و debug.log را بساز. ثابت کن git status -s فقط app.js را نشان می‌دهد؛ تلاش کن .env را با git add .env اضافه کنی و خطای Git را ببین. بعد app.js را commit کن. ۳. پیام آن commit را (عمداً با یک غلط تایپی نوشته بودی) با --amend درست کن و نشان بده شناسه‌ی commit عوض شد. ۴. فایل feature.js را (با یک «باگ» در آن) در یک commit جدا اضافه کن؛ بعد فرض کن این commit به اشتراک گذاشته شده و آن را با git revert خنثی کن. ۵. ثابت کن: (الف) git log --oneline یک تاریخچه‌ی خوانا دارد، (ب) .env هرگز در هیچ commit ای نبوده، و (ج) با git log -S پیدا کن کدام commit کلمه‌ی «bug» را اضافه کرده است. ۶. همه‌چیز را پاک کن.

راهنمایی

برای (ب): git log --all -- .env باید خالی باشد و git ls-files نباید .env را نشان دهد. برای ۴: git revert --no-edit HEAD. برای بررسی اینکه ignore شده: git check-ignore -v .env.

راه‌حل
Terminal window
git config --global user.name "Ali"
git config --global user.email "ali@example.com"
git config --global init.defaultBranch main
mkdir -p ~/gitlab/quiz1 && cd ~/gitlab/quiz1 && git init -q
printf 'node_modules/\n*.log\n.env\n' > .gitignore
git add .gitignore && git commit -qm "Add .gitignore"
echo "== ۲) فایل‌ها و ignore"
echo "console.log('hi')" > app.js
echo "DB_PASSWORD=fake-123" > .env
mkdir -p node_modules/x && echo m > node_modules/x/index.js
echo "oops" > debug.log
git status -s
git add .env 2>&1 | head -3
git add app.js && git commit -qm "Add app entry piont"
echo "== ۳) اصلاح پیام"
git log --oneline -1
git commit --amend -qm "Add app entry point"
git log --oneline -1
echo "== ۴) فایل باگ‌دار و revert"
echo "const bug = true" > feature.js
git add feature.js && git commit -qm "Add feature"
git revert --no-edit HEAD > /dev/null
echo "== ۵) بررسی"
git log --oneline
echo "-- .env در تاریخچه؟ (باید خالی باشد):"
git log --all --oneline -- .env
echo "-- فایل‌های tracked:"; git ls-files
echo "-- commit ای که «bug» را اضافه کرد:"
git log -S"bug" --format='%h %s'
echo "== ۶) پاک‌سازی"
cd ~ && rm -rf ~/gitlab ~/.gitconfig
خروجی
== ۲) فایل‌ها و ignore
?? app.js
The following paths are ignored by one of your .gitignore files:
.env
hint: Use -f if you really want to add them.
== ۳) اصلاح پیام
855f4d0 Add app entry piont
30a51c3 Add app entry point
== ۴) فایل باگ‌دار و revert
== ۵) بررسی
6f6f8c2 Revert "Add feature"
a9b0ef3 Add feature
30a51c3 Add app entry point
f639119 Add .gitignore
-- .env در تاریخچه؟ (باید خالی باشد):
-- فایل‌های tracked:
.gitignore
app.js
-- commit ای که «bug» را اضافه کرد:
6f6f8c2 Revert "Add feature"
a9b0ef3 Add feature
== ۶) پاک‌سازی

دقت کن git log -S"bug" هر دو commit را نشان می‌دهد: آنکه «bug» را اضافه کرد (Add feature، پایین‌تر و قدیمی‌تر) و آنکه حذفش کرد (Revert)؛ چون -S هر commit ای را که تعداد آن متن را عوض کرده پیدا می‌کند.