فرض کنید روی یک سایت یا اسکریپت کار میکنید و هنوز به نتیجه نرسیدهاید. همزمان یک باگ فوری هم از راه میرسد. اگر همهٔ تغییرها روی یک شاخه باشد، یا باید کار نیمهکاره را برگردانید یا باگ را با همان آشفتگی قاطی کنید. کتاب رسمی Pro Git همین سناریو را با ساخت شاخهٔ جدا برای کار جدید و شاخهٔ hotfix برای اصلاح فوری نشان میدهد.
چگونه شاخه گیت بسازید و به آن بروید
اول ترمینال را در پوشهٔ مخزن باز کنید و مطمئن شوید وضعیت تمیز است یا تغییرهای مهم را commit کردهاید. گیت وقتی فایلهای ذخیرهنشده با شاخهٔ مقصد تداخل داشته باشند، معمولاً اجازهٔ جابهجایی نمیدهد. اگر پیام خطا دیدید، اول وضعیت را با git status بخوانید؛ همان صفحهٔ رسمی هم روی وضعیت تمیز قبل از جابهجایی تأکید دارد.
- نام شاخه را کوتاه و واضح بگذارید، مثلاً feature-footer یا hotfix-email.
- با دستور مدرن بسازید و بروید: git switch -c feature-footer. معادل قدیمیتر در کتاب Pro Git این است: git checkout -b feature-footer.
- با git status ببینید روی همان شاخه هستید. پیام باید شبیه On branch feature-footer باشد.
- فایلها را عوض کنید، بعد git add و git commit. هر commit فقط روی همین شاخه جلو میرود؛ main سرجایش میماند.
برای برگشتن به خط اصلی بنویسید git switch main (یا git checkout main). پوشهٔ کار به آخرین وضعیت همان شاخه برمیگردد. این همان نکتهٔ مهم کتاب است: با عوض کردن شاخه، گیت فایلها را طوری تنظیم میکند که با آخرین commit همان شاخه جور باشند. یعنی کار نیمهکارهٔ شاخهٔ feature ناپدید نشده؛ فقط فعلاً دیده نمیشود تا دوباره به همان شاخه برگردید.
اگر همین الان روی پروژهای کار میکنید، بگویید معمولاً کار نیمهکاره را روی main رها میکنید یا از اول شاخه میسازید؟
اصلاح فوری بدون خراب کردن کار جاری
وقتی باگ فوری آمد، اول تغییرهای شاخهٔ فعلی را commit کنید. بعد به main بروید، یک شاخهٔ کوتاه مثل hotfix بسازید، اصلاح را commit کنید، سپس به main برگردید و ادغام کنید:
- git switch main
- git switch -c hotfix
- بعد از تست: git switch main و سپس git merge hotfix
- اگر شاخهٔ hotfix دیگر لازم نیست: git branch -d hotfix
در مثال کتاب، وقتی تاریخچه مستقیم جلو رفته باشد، ادغام ممکن است «fast-forward» باشد؛ یعنی اشارهگر main فقط جلو میآید. اگر دو شاخه از یک نقطه مشترک جدا شده باشند، گیت یک commit ادغام میسازد و هر دو مسیر را نگه میدارد.
وقتی ادغام گیر میکند
اگر همان بخش یک فایل در دو شاخه جور دیگری عوض شده باشد، گیت ادغام را متوقف میکند و در فایل علامتهای <<<<<<< و ======= و >>>>>>> میگذارد. فایل را باز کنید، نسخهٔ درست را نگه دارید، علامتها را پاک کنید، بعد git add روی همان فایل و در پایان git commit تا ادغام تمام شود. برای جزئیات بیشتر همان صفحهٔ Basic Branching and Merging منبع این مطلب است.
خلاصهٔ عملی: شاخه برای آزمایش و ویژگی تازه، main برای چیزی که باید پایدار بماند. قبل از جابهجایی، وضعیت را با git status چک کنید. بعد از ادغام موفق، شاخهٔ موقت را پاک کنید تا لیست شاخهها شلوغ نشود. اگر تیم دارید، نام شاخه را طوری بگذارید که بقیه بفهمند موضوع چیست؛ نام مبهم فقط بعداً سردرگمی میآورد.
آخرین باری که مجبور شدید کار نیمهکاره را بهخاطر یک باگ فوری کنار بگذارید، از شاخه استفاده کردید یا همه را روی main قاطی کردید؟