آموزش زبان انگلیسی (دورهٔ ۹۰ درسی) · درس ۵۴ از ۹۰

گیت به انگلیسی؛ commit, pull request و merge بدون تصادف

⚡ پاسخ کوتاه

گیت، گرامرِ کارِ تیمی است و جمله‌هایش ثابت‌اند: I'll create a branch, open a PR, address the comments, and merge. سخت‌ترین لحظه‌اش هم جمله دارد: "I have a merge conflict — could you help me resolve it?" این درس، دیکشنریِ گفتاریِ گیت را می‌سازد — از clone تا squash.

درس ۵۴ از ۹۰ — گیت به انگلیسی؛ commit, pull request و merge بدون تصادف

اگر تا حالا گیت را تنها استفاده می‌کردی، جمله‌هایش را «نمی‌دیدتی»؛ اما در تیم، گیت زنده حرف می‌زند: در اسلک، در استندآپ، در ریلویو. و اشتباه‌های گیت — کنفلیکت، فورس‌پوش، ری‌بِیسِ اشتباه — وقتی زبان نداشته باشی، به‌جای «پشیمانیِ فنی» به «وحشتِ زبانی» تبدیل می‌شوند.

این درس فقط لحنِ گفتاری را می‌دهد (دستورِ گیت که خودت بلدی یا help می‌گیرد): فعلِ درست برای هر عمل، اسم‌های محاوره‌ای (PR, repo, main), و جمله‌های پیش apologize. ریلویویِ کامل، درسِ بعدی است؛ این درس زیرساختِ گفتاری‌اش.

فعل‌های گیت؛ دیکشنریِ روزانه

عمل فعلِ گفتاری جمله
repo را کپی کردن clone Clone the repo and run the setup script.
شاخهٔ جدید branch off / create a branch I'll branch off main for this feature.
ثبتِ تغییر commit Committed the fix — small, focused commit.
گرفتنِ تغییرِ دیگران pull Pull main before you start — it moved.
فرستادن push Just pushed — can you take a look?
درخواستِ ادغام open a PR I opened a PR — it's ready for review.
دیدگاه‌ها را اعمال‌کردن address the comments Addressed your comments and pushed again.
ادغام merge Merged! The feature is on staging.
ادغامِ فشرده squash and merge Let's squash — 14 commits is too noisy.
برگشتن revert / roll back We reverted the release — back to normal.

اسم‌های محاوره: repo (ریپازیتوری), main (شاخهٔ اصلی — قبلاً master), PR (pull request; در GitLab: MR = merge request), diff (اختلافِ نسخه‌ها), conflict (تعارض), commit history (تاریخچه). و ادبِ فنی: اسمِ شاخه را معنادار بگذار و در پیامِ اسلک بگو: "PR is up: feature/checkout-v2 — small one, ~200 lines."

Pull Request؛ پستِ مرکزیِ گفتگو

قالبِ توضیحِ PR (که آدم‌ها را دوستت می‌کند): What & Why: "Adds retry logic to the payment client." · How: "Uses exponential backoff, capped at 5 tries." · Testing: "Covered with unit tests; deployed to staging and ran a manual charge." · Notes: "Diff looks big, but half of it is a generated file." — همین چهار خط، نصفِ سوال‌های ریلویور را قبل از پرسیدن جواب می‌دهد. و درخواستِ ریلویوی محترمانه: "Could you review when you get a chance? Not urgent — by EOD would be great."

PR is up: it moves the email sender to a background job. Small blast radius, tests included. Let me know if anything looks off!PR اومد: ایمیل‌فرست رو بردیم روی jobِ پس‌زمینه. دامنهٔ اثرِ کوچیک، تست هم داره. اگه چیزی مشکوک بود خبر کن!

وقتی خراب شد؛ جمله‌های پیش‌آپدیجیِ گیت

کنفلیکت: "I have a merge conflict with main — could you pair with me for five minutes? I don't want to break the release." فورس‌پوشِ اشتباه: "Heads-up: I force-pushed to the shared branch by accident — I'm fixing it now, sorry!" (Heads-up = توجه — کلمهٔ نجاتِ اعلامِ خرابی) برگشتنِ فوری: "Can we revert the last commit on main? It broke the build." لاگِ گم‌شده: "Does anyone know where yesterday's commits went? I can't find the branch." — همهٔ این جمله‌ها با آرامشِ صریح گفته می‌شوند؛ در فرهنگِ تیم‌های سالم، اعلامِ سریعِ خرابی، امتیاز است: "I'd rather flag it early than let it spread."

گرامرِ عمیق‌تر: فعل‌های PR و مجهولِ گیت

گیت، زبانِ مجهولِ مسئول است: The PR was reviewed by two engineers (PR توسطِ دو مهندس ریلویو شد), The build got broken (بیلد خراب شد — get + قسم برای «اتفاقِ ناخوشایند»). فعل‌های چرخه: open / update / rebase / merge / revert / close — و مخفف‌های گفتاری: WIP (work in progress — در حالِ کار: a WIP PR), PTAL (please take another look), LGTM, NIT. و جفت‌های خائنِ لحن: "I pushed" (من پوش کردم — خبرِ عادی) در برابرِ "It got pushed" (پوش شد — خبرِ رخ‌داده!).

The PR is ready for review: tests updated, the diff is small, and the migration got squashed into one commit. PTAL when you get a chance.PR آمادهٔ ریلویوئه: تست‌ها آپدیت شد، دیف کوچیکه و کامیت‌ها اسکواش شد. یه نگاه بندازید وقتی وقت کردید.

گفتگو: کنفلیکت و درخواستِ کمک

You: Heads-up — my branch has a conflict with main. Looks like the same file we both touched. — Lead: Ah, the config refactor. Want to pair for five minutes?تو: خبر — برنچم با main کنفلیکت داره. ظاهراً همون فایلی که هر دومان دست زدیم. — لید: آ، ری‌فکتورِ کانفیگ. پنج دقیقه پِر می‌شیم؟
You: Yes please — I don't want to break the release. — Lead: Take theirs for the config lines, keep yours for the feature part. Then rebase and push.تو: لطفاً — نمی‌خوام ریلیز رو خراب کنم. — لید: خطوطِ کانفیگ رو نسخهٔ اونا رو نگه دار، بخشِ فیچر رو مالِ خودت. بعد ری‌بیس و پوش.
You: Done — clean diff now, tests green. Thanks — conflict on shared config is exactly the thing I didn't want to learn the hard way. — Lead: That's what the team is for!تو: تمام شد — دیف تمیزه، تست‌ها سبز. ممنون — کنفلیکت رویِ کانفیگِ مشترک دقیقاً همون چیزی بود که نمی‌خواستم از راهِ سخت یاد بگیرم. — لید: تیم برایِ همینه!

اشتباه‌های رایجِ فارسی‌زبان‌ها در همین درس

این بخش را با یک قرارداد بخوان: هر ❌ یعنی «مغزِ فارسی‌زبانت این را می‌سازد و طبیعی است»، و هر ✅ یعنی «این همان چیزی است که گیرندهٔ انگلیسی‌زبان می‌شنود». خطاها اثرِ مستقیمِ ترجمهٔ ذهنیِ فارسی به انگلیسی‌اند؛ با هر جفت بلند تکرار کن تا شکلِ درست در گوشت نشست کند.

❌ I will push my branch to the GitHub.❌ «به گیت‌هاب» را مغز با the قاب می‌کند؛ اما اسمِ پلتفرم‌ها برهنه می‌نشینند: to GitHub، to Slack، to AWS. حرفِ تعریفِ اضافی، ردِ ترجمهٔ ذهن است — حتی وقتی همه‌چیزِ دیگر درست است.
✅ I'll push my branch to GitHub.✅ شکل درست را دو بار بلند بگو؛ حالا یک بار در یک جملهٔ خودت.
❌ Can you merge my code?❌ «مرج کن» مرزِ بازبینی را می‌پرد؛ در تیمِ انگلیسی کد مستقیم merge نمی‌شود: اول review، بعد address the comments، بعد merge. گفتارِ گیت همین ترتیب را با فعل‌های خودش زنده نگه می‌دارد.
✅ Could you review my PR when you get a chance?✅ شکل درست را دو بار بلند بگو؛ حالا یک بار در یک جملهٔ خودت.
❌ We have conflict between our branches.❌ «تعارضِ بینِ شاخه‌ها» را مغز با between می‌سازد؛ اما جملهٔ ثابتِ تیم‌ها شخصی و ساده است: I have a merge conflict with main — با مالکیتِ I. کمک‌خواستنِ شفاف، زودتر از گزارشِ مبهم می‌آید.
✅ I have a merge conflict with main.✅ شکل درست را دو بار بلند بگو؛ حالا یک بار در یک جملهٔ خودت.

تمرین‌های این درس — چهار قدم، بی‌عجله

گیتِ گفتاری را با جملهٔ کامل تمرین کن — انگار پیامِ اسلکِ تیم را همین حالا می‌نویسی.

  1. پیامِ چهارخطیِ PR را بساز برای «افزودنِ retry به کلاینتِ پرداخت»: What & Why / How / Testing / Notes.
  2. اصلاح کن: "I opened pull request for merge my feature. We have conflict between branches."
  3. جمله‌های خرابی را بگو: فورس‌پوشِ اشتباهی به شاخهٔ اشتراکی — اعلام + عذرخواهی + اقدام.
  4. جای خالی: «I'll ___ off main, then open a PR and ___ your comments before we merge.»

پاسخ تمرین‌ها — اول خودت جواب بده، بعد باز کن

پاسخ تمرین ۱
نمونه: "What & Why: adds retry logic to the payment client. How: exponential backoff, capped at 5 tries. Testing: unit tests + a manual charge on staging. Notes: the diff looks big, but half is a generated file." — چهار خطی که نصفِ سؤال‌های بازبین را قبل از پرسیدن جواب می‌دهد.
پاسخ تمرین ۲
"I opened a PR for my feature — it's ready for review. Also, I have a merge conflict with main — could you pair with me for five minutes?" — PR با حرفِ تعریف و ready for review؛ و کنفلیکت با مالکیتِ I و شاخهٔ main.
پاسخ تمرین ۳
"Heads-up: I force-pushed to the shared branch by accident — I'm fixing it now, sorry!" — heads-up + شرح + اقدام + عذرخواهی؛ در تیم‌های سالم، اعلامِ سریعِ خرابی امتیاز است نه جریمه.
پاسخ تمرین ۴
branch و address — "I'll branch off main … and address your comments before we merge." دو فعلِ گیت که چرخهٔ کارِ تیمی را می‌سازند: شاخه‌زدن و پاسخ‌دادن.

چالشِ امروز

🎯 در پیامِ کاریِ بعدی‌ات سه فعلِ این درس را در جایِ درست بگذار — branch off، open a PR، address the comments — و اگر کنفلیکتی در کار است با مالکیتِ خودت اعلامش کن؛ گفتارِ درستِ گیت، اولین روزِ حرفه‌ای‌ات را امن می‌کند.

نکات مکالمهٔ واقعی که کتاب‌ها کم می‌گویند

  • اعلامِ خرابی با heads-up — هر خرابیِ گیت با heads-up + اقدام: «Heads-up: I force-pushed by accident — fixing now.» — اعلامِ سریع، نصفِ جِرم نیست؛ تمامِ حرفه‌ای‌بودن است.
  • PR کوچک را قربانی کن — PRِ بزرگ را خودت اسپلیت کن قبل از درخواستِ ریلویو — «small PRs get reviewed today; big ones get reviewed someday.»
  • diff را قبل از درخواست بخوان — قبل از درخواستِ ریلویو، خودت رویِ diff پُل‌ریکوئستت را ریلویو کن — کامنتِ «هووم، این چرا آمد؟» را خودت جواب بده؛ ریلویوِ خود، نصفِ ریلویویِ دیگران است.
🔑 جمع‌بندی این درس

گیت گفتاری: branch off / commit / pull / push / open a PR / address comments / squash and merge / revert. PR با چهار خطِ What-How-Testing-Notes. خرابی با heads-up + sorry + درخواستِ help. جملهٔ امنیتیِ هر جا: "I don't want to break the release" — نشانِ مهندسِ مسئول، در هر زبانی.

پرسش‌های رایج

«It works on my machine» را جدی بگویم؟
به‌عنوان شوخی، آره — به‌عنوان استدلال، هرگز! نسخهٔ حرفه‌ای: "It runs locally, but the CI environment is different — let me check the config." (لوکال اجرا می‌شه ولی محیطِ CI فرق داره — بذار کانفیگ رو چک کنم.) جملهٔ شوخی‌اش را همه می‌دانند و می‌خندند؛ جملهٔ جدی‌اش را مهندس‌ها می‌پسندند.
Rebase و merge در گفتار چطور جدا می‌شوند؟
هر دو، آوردنِ تغییرِ شاخه‌ها به هم است؛ فرقِ فنی: merge تاریخچه را حفظ می‌کند، rebase خطی می‌سازد. در گفتار: "Should we rebase on main or just merge?" (ری‌بیس کنیم روی main یا فقط مِرج؟) و قاعدهٔ محترمانهٔ تیم‌ها: **نprecher هرگز روی شاخهٔ اشتراکی rebase نکن** — جمله‌اش اگر لازم شد: "Rebasing the shared branch would rewrite history — let's merge instead." (تاریخچه رو عوض می‌کنه — مِرج کنیم.)

انگلیسی را همین امروز در گوشی‌ات تمرین کن

واژه‌های این درس را هر جا که دیدی با منوی «ذخیره در آپ‌ورد» به فلش‌کارت‌هایت اضافه کن؛ الگوریتم مرور فاصله‌دار سرِ موعد یادآوری‌شان می‌کند، تلفظ‌شان را می‌شنوی و در مکالمهٔ هوش مصنوعی همان‌جا که لازم است استفاده‌شان می‌کنی.