آشنایی با Git: شاخه‌ها (Branch)

Introduction to Git: Branches

25 بهمن 1399
درسنامه درس 4 از سری آشنایی با Git
آشنایی با Git: شاخه ها (branch)

در این جلسه در مورد شاخه ها (branch) صحبت می کنیم. همانطور که قبلا توضیح داده ایم شاخه ها یک نسخه موازی (کپی) از پروژه اصلی هستند. زمانی که می خواهید ویژگی های جدیدی را در برنامه خود ایجاد کنید بهتر است از شاخه ها استفاده کنید تا اگر برنامه به مشکلی خورد (به طور مثال کدهای جدید با کدهای قبلی ناسازگاری داشتند) بتوانید بدون زحمت به نسخه قبلی برنامه تان برگردید.

نمایی از شاخه های مختلف یک پروژه ی فرضی
نمایی از شاخه های مختلف یک پروژه فرضی

شاخه ها history یا تاریخچه مستقل خودشان را دارند و تغییر در یک شاخه روی شاخه های دیگر اثری نخواهد داشت. البته اگر در آخر قابلیت جدید شما با برنامه سازگار بود و تکمیل کدها نهایی شد می توانید شاخه را در شاخه اصلی (master) یا هر شاخه دیگری ادغام کنید تا تمام تاریخچه و موارد دیگر یکجا قرار بگیرند. معمولا مزیت استفاده از شاخه ها در چند مورد زیر خلاصه می شود:

  • آخرین نسخه پایدار و سالم از برنامه محفوظ خواهد ماند.
  • می توانیم قابلیت های متعدد و زیادی را همزمان توسط افراد مختلف به برنامه ارائه کنیم (بدون آنکه کد های اصلی برنامه بهم بریزد).
  • توسعه دهندگان مختلف می توانند روی شاخه های مختلف از یک پروژه واحد کار کنند بدون اینکه در برنامه اصلی یا کدهای یکدیگر تغییراتی ایجاد کنند.
  • ایجاد نسخه های مختلف از یک قابلیت جدید، بررسی آن ها و در نهایت انتخاب بهترین و بهینه ترین روش برای ایجاد آن قابلیت.

1. ایجاد شاخه جدید

شاخه پیش فرض هر repository مستر (master) نام دارد. بنابراین هر repository حداقل یک شاخه به نام master خواهد داشت. برای ایجاد شاخه های بیشتر می توانیم از دستور زیر استفاده کنیم:

$ git branch amazing_new_feature

این دستور یک شاخه جدید به نام amazing_new_feature ایجاد می کند. در حال حاضر این شاخه هیچ تفاوتی با شاخه master ما ندارد چرا که هنوز چیزی را تغییر نداده ایم.

نکته: استفاده از دستور git branch به صورت خالی به شما لیستی از شاخه های موجود را می دهد. در صورتی که به آن r- را نیز اضافه کنید (یعنی git branch -r) فقط شاخه هایی را می دهد که روی سرور (remote) قرار دارند.

2. تغییر شاخه کاری

برای مشاهده شاخه های موجود می توانید دستور git branch را اجرا کنید. با اجرای این دستور در پوشه git_exercise خودمان باید با چنین خروجی روبرو شویم:

$ git branch
  amazing_new_feature
* master

یعنی دو شاخه داریم: یکی amazing_new_feature و دیگری master. در حال حاضر شاخه master دارای یک علامت ستاره (*) است و این علامت یعنی فعلا در شاخه master قرار داریم. ما می خواهیم ویژگی های جدید را در شاخه amazing_new_feature پیاده سازی کنیم بنابراین باید شاخه کاری خود را تغییر داده و به amazing_new_feature برویم. برای این کار می توان از دستور Git checkout استفاده کرد:

$ git checkout amazing_new_feature
Switched to branch 'amazing_new_feature'

حالا اگر git branch را اجرا کنید این پاسخ را می گیرید:

$ git branch
* amazing_new_feature
  master

حالا شاخه amazing_new_feature ستاره دار شده است بنابراین در این شاخه هستیم.

3. ادغام شاخه ها

یک فایل متنی ساده دیگر به نام feature.txt بسازید (در همان پوشه git_exercise). حالا آن را به stage اضافه می کنیم:

$ git add feature.txt

سپس تغییرات حاصل شده تا این قسمت را commit می کنیم:

$ git commit -m "New feature complete."

حالا به شاخه master برمی گردیم:

$ git checkout master

اگر به پوشه git_exercise بروید متوجه می شوید که فایل feature.txt ناپدید شده است! دلیل آن هم این است که این فایل هیچ وقت در شاخه master ساخته نشده است بنابراین در این قسمت نیز وجود ندارد! برای به وجود آوردن آن می توانیم از دستور git merge استفاده کنیم تا دو شاخه در هم ادغام شوند:

git merge amazing_new_feature

حالا که آن ها را در هم ادغام کرده ایم نیازی به شاخه amazing_new_feature نداریم و می توانیم آن را به شکل زیر حذف کنیم:

git branch -d amazing_new_feature

جمع بندی جلسات اولیه

برای استفاده از git باید ابتدا آن را نصب کنید. پس از نصب بهتر است نام و ایمیل خود را ثبت کنید تا ایجاد کننده تغییرات مشخص شود:

$ git config --global user.name "My Name"
$ git config --global user.email myEmail@example.com

می توانید با استفاده از دستور git init یک repository جدید ایجاد کنید:

$ cd Desktop/git_exercise/
$ git init

دستور git status به شما وضعیت stage را می دهد:

$ git status

On branch master

Initial commit

Untracked files:
  (use "git add ..." to include in what will be committed)

    hello.txt

دستور git add یک فایل را به stage اضافه می کند. به زبان ساده تر تغییرات آن فایل را دنبال خواهد کرد:

$ git add hello.txt

اگر چندین فایل در دیرکتوری خود دارید و می خواهید همگی یکجا اضافه شوند از دستور زیر استفاده کنید:

$ git add -A

A مخفف All به معنی «همه» است.

دستور git commit یک commit ایجاد می کند:

$ git commit -m "Initial commit."

پیام داخل quotation ها مربوط به توضیحات این commit هستند بنابراین می توانید هر مقداری را در آن بنویسید. سعی کنید توضیحاتی دقیق و خوانا بنویسید.

اگر بخواهیم پروژه محلی خود را به سرور منتقل کنیم git remote add به ما کمک می کند تا به سرور متصل شویم:

git remote add origin https://github.com/Amir-Zouerami/roxo-ir-sample.git

سپس با دستور git push میتوان commit های جدید را به سرور آپلود کرد:

$ git push origin master

در این دستور origin نام repository ما و master نام شاخه مورد نظر می باشد.

همچنین برای clone کردن (کپی گرفتن) از repository ها می توان از دستور git clone استفاده کرد:

$ git clone https://github.com/Amir-Zouerami/roxo-ir-sample.git

در صورتی که می خواهید فایل ها را از سرور روی هارد دیسک خود بیاورید می توانید از دستور pull استفاده کنید:

$ git pull origin master

امیدوارم از این قسمت لذت برده باشید. در قسمت بعد به بررسی موارد پیشرفته تر خواهیم پرداخت.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آشنایی با Git توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.