Working with Branches
فرض میکنیم که باگی گزارش شده. حال برای رفع این باگ، ابتدا باید یه branch به نامِ bugfix
بسازیم.
git branch bugfix
حالا، برای دیدنِ لیستِ branchها دستورِ زیر رو مینویسیم.
> git branch
bugfix
* master
در حال حاضر دو تا branch داریم.ستاره این رو نشون میده که در حال حاضر در master branch هستیم. علاوه بر اون میتونید از طریقِ خودِ command line از branchای که درش هستین، مطلع بشین.
یکی از مشکلاتی که بسیاری از مردم باهاش مواجه میشن اینه که به صورتِ تصادفی کدشون رو در branch اشتباهی کامیت میکنن.
راهِ دیگهای که branchای که اکنون درش هستیم رو بفهمیم استفاده از دستورِ git status
هستش.
حالا که branchمون رو برای رفعِ باگ ساختیم باید به این branch سوئیچ کنیم. دو راه برای این کار هست.
در گذشته از دستورِ checkout
برای این کار استفاده میشد. اما این دستور چندین مورد استفاده داشت. کلی از مردم براشون سردرگمکننده بود. پس این روزها یک دستورِ جدید برای تغییر branchها داریم.
git switch bugfix
با اجرایِ دستورِ بالا، به bugfix branch سوئیچ میکنیم. (Head الان داره به bugfix اشاره میکنه)
میتونیم ساختِ branch و سوئیچ بهش رو با یه دستور انجام بدیم. (از آپشنِ C—
استفاده میکنیم.)
git switch -C bugfix/login-form
قبل از ادامه میخواهیم اسمِ این branch رو تغییر بدیم. اصلاً مشخص نشده که قراره کدوم باگ رو درش رفع کنیم. همچنین در آینده نیز خیلی احتمال داره که دهها یا صدها باگِ دیگه برای رفع داشته باشیم. پس بهتره از یک نامِ مشخصتری استفاده کنیم. برای تغییر نامِ این branch از دستورِ زیر استفاده میکنیم.
git branch -m bugfix bugfix/signup-form
در نامگذاریِ branch از قاعدهی اسمگذاریای استفاده کردیم که از طریقش branchها رو تقسیمبندی میکنیم. و البته این قاعده ترجیحِ شخصی هستش.
پس از اینکه باگ رو رفع کردیم و در فایلهامون تغییراتی رو اعمال کردیم الان مسیرِکاریمون dirty شده. و این رو میتونیم از خروجیِ دستورِ git status
نیز ببینیم. پس تغییرات رو به stage اضافه میکنیم و سپس کامیت میکنیم.
git add .
git commit -m "Fix the buf that prevented the users from signing up"
الان به لاگمون یه نگاهی بندازیم.
> git log --oneline
f882c5c (HEAD -> bugfix/signup-form) Fix the bug that prevented the users from signing up.
9D52f6f (master) Restore toc.txt
5e7a828 Remove toc.txt
a642e12 Add header to all pages.
...
همانطور که میبینید HEAD دار به bugfix branch اشاره میکنه و این یعنی در حال حاضر در bugfix branch هستیم و کامیتِ f882c5c در حال حاضر آخرین کامیتِ این branch هستش. پایینِ این کامیت میتونیم master branch رو هم ببینیم که فقط یه اشارهگر به کامیت هستش. و الان میدونیم master branch یک کامیت قبلتر از bugfix branch هستش. که قراره در بخشهایِ بعدی این دو رو با هم ادغام کنیم.
الان اگه با دستورِ git switch master
به master branch سوئیچ کنیم خواهیم دید که تغییراتی که در bugfix branch اعمال کرده بودیم نیستش. همانطور که گفته شده بود branchها به ما اجازهی کار رو روی تسکهایِ متفاوت بصورتِ isolation میدن. کدهای تویِ branchها مجزا از هم هستن. اما در یه نقطهای mergeشون میکنیم تا یه جا باشن.
الان که در master branch هستیم اگه لاگمون رو ببینیم، خواهیم دید که HEAD به master branch داره اشاره میکنه و همچنین bugfix branch رو هم نمیبینیم.
> git log --oneline
9D52f6f (master) Restore toc.txt
5e7a828 Remove toc.txt
a642e12 Add header to all pages.
...
. پس کامیتهایِ bugfix branch بصورتِ پیشفرض در بالا لیست نشدن. برای دیدن کامیتهایِ همهی branchها از آپشنِ all استفاده میکنیم.
git log --oneline --all
فرض میکنیم که bugfix branch رو با master branch ادغامش کردیم و پس از اون باید پاکش کنیم. پس دستورِ زیر رو برای پاک کردنِ branch استفاده میکنیم.
git branch -d bugfix/signup-form
ولی خروجیِ کد بالا، خطا خواهد بود. پیام این خطا اینه که این branch کامل merge نشده. چون یه سری تغییرات در branch داریم که هنوز با master branch ادغام نشده. به همین خاطر دستورِ بالا از حذفِ تصادفیِ branchمون جلوگیری میکنه. مگر اینکه اول mergeش کنیم.
اما اگر کاملاً مطمئن هستین که این تغییرات داخلِ این branch رو نمیخواین میتونین به اجبار حذفش کنین. برای این کار از آپشنِ D-
استفاده کنین.
git branch -D bugfix/signup-form