-
1. شروع به کار (getting started)
-
2. مقدمات گیت (git basics chapter)
- 2.1 گرفتن یک مخزن گیت (Getting a Git Repository)
- 2.2 ثبت تغییرات در مخزن (Recording Changes to the Repository)
- 2.3 مشاهده تاریخچه کامیتها (Viewing the Commit History)
- 2.4 بازگرداندن تغییرات (Undoing Things)
- 2.5 کار کردن با ریموت ها (Working with Remotes)
- 2.6 تگ کردن (Tagging)
- 2.7 نام مستعار گیت (Git Aliases)
- 2.8 خلاصه (summary)
-
3. انشعابگیری در گیت (Git Branching)
-
4. گیت روی سرور (Git on the server)
- 4.1 پروتکلها (The Protocols)
- 4.2 راهاندازی گیت روی یک سرور (Getting Git on a Server)
- 4.3 ایجاد کلید عمومی SSH شما (Generating Your SSH Public Key)
- 4.4 نصب و راهاندازی سرور (Setting up server)
- 4.5 سرویسدهنده گیت (Git Daemon)
- 4.6 HTTP هوشمند (Smart HTTP)
- 4.7 گیتوب (GitWeb)
- 4.8 گیتلب (GitLab)
- 4.9 گزینههای میزبانی شخص ثالث (Third Party Hosted Options)
- 4.10 خلاصه (Summary)
-
5. گیت توزیعشده (Distributed git)
-
6. GitHub (گیت هاب)
-
7. ابزارهای گیت (Git Tools)
- 7.1 انتخاب بازبینی (Revision Selection)
- 7.2 مرحلهبندی تعاملی (Interactive Staging)
- 7.3 ذخیره موقت و پاکسازی (Stashing and Cleaning)
- 7.4 Signing Your Work (امضای کارهای شما)
- 7.5 جستجو (Searching)
- 7.6 بازنویسی تاریخچه (Rewriting History)
- 7.7 بازنشانی به زبان ساده (Reset Demystified)
- 7.8 ادغام پیشرفته (Advanced Merging)
- 7.9 بازاستفاده خودکار از حل تضادها (Rerere)
- 7.10 اشکالزدایی با گیت (Debugging with Git)
- 7.11 سابماژول ها (Submodules)
- 7.12 بستهبندی (Bundling)
- 7.13 جایگزینی (Replace)
- 7.14 ذخیرهسازی اطلاعات ورود (Credential Storage)
- 7.15 خلاصه (Summary)
-
8. سفارشیسازی Git (Customizing Git)
-
9. گیت و سیستمهای دیگر (Git and Other Systems)
-
10. (Git Internals)
- 10.1 ابزارها و دستورات سطح پایین (Plumbing and Porcelain)
- 10.2 اشیا گیت (Git Objects)
- 10.3 مراجع گیت (Git References)
- 10.4 فایلهای بسته (Packfiles)
- 10.5 نگاشت (The Refspec)
- 10.6 پروتکلهای انتقال (Transfer Protocols)
- 10.7 نگهداری و بازیابی دادهها (Maintenance and Data Recovery)
- 10.8 متغیرهای محیطی (Environment Variables)
- 10.9 (Summary)
-
A1. پیوست A: گیت در محیطهای دیگر (Git in Other Environments)
- A1.1 رابط های گرافیکی (Graphical Interfaces)
- A1.2 Git در ویژوال استودیو (Git in Visual Studio)
- A1.3 Git در Visual Studio Code (Git in Visual Studio Code)
- A1.4 Git در IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine (Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine)
- A1.5 Git در Sublime Text (Git in Sublime Text)
- A1.6 گیت در بش (Git in Bash)
- A1.7 Git در Zsh (Git in Zsh)
- A1.8 Git در PowerShell (Git in PowerShell)
- A1.9 خلاصه (Summary)
-
A2. پیوست B: گنجاندن گیت در برنامههای شما (Embedding Git in your Applications)
-
A3. پیوست C: دستورات گیت (Git Commands)
- A3.1 تنظیم و پیکربندی (Setup and Config)
- A3.2 گرفتن و ایجاد پروژهها (Getting and Creating Projects)
- A3.3 نمونهبرداری پایهای (Basic Snapshotting)
- A3.4 انشعابگیری و ادغام (Branching and Merging)
- A3.5 بهاشتراکگذاری و بهروزرسانی پروژهها (Sharing and Updating Projects)
- A3.6 بازرسی و مقایسه (Inspection and Comparison)
- A3.7 عیبیابی (Debugging)
- A3.8 اعمال تغییرات به صورت پچ (Patching)
- A3.9 ایمیل (Email)
- A3.10 سیستمهای خارجی (External Systems)
- A3.11 مدیریت (Administration)
- A3.12 دستورات سطح پایین گیت (Plumbing Commands)
3.3 انشعابگیری در گیت (Git Branching) - مدیریت شاخهها (Branch Management)
مدیریت شاخهها (Branch Management)
حال که شاخههایی را ایجاد، ادغام و حذف کردهاید، بیایید نگاهی به ابزارهای مدیریت شاخه بیندازیم که هنگام استفاده مداوم از شاخهها به کارتان خواهند آمد.
دستور git branch
فقط برای ایجاد و حذف شاخهها نیست.
اگر آن را بدون آرگومان اجرا کنید، فهرستی ساده از شاخههای فعلیتان را خواهید دید:
$ git branch
iss53
* master
testing
توجه کنید به علامت *
که جلوی شاخه master
قرار دارد؛ این علامت شاخهای را نشان میدهد که در حال حاضر روی آن قرار دارید (یعنی شاخهای که HEAD
به آن اشاره میکند).
این یعنی اگر در این لحظه کامیت کنید، شاخه master
با کار جدید شما به جلو حرکت خواهد کرد.
برای دیدن آخرین کامیت هر شاخه، میتوانید دستور git branch -v
را اجرا کنید:
$ git branch -v
iss53 93b412c Fix javascript issue
* master 7a98805 Merge branch 'iss53'
testing 782fd34 Add scott to the author list in the readme
گزینههای مفید --merged
و --no-merged
میتوانند این فهرست را فیلتر کنند تا فقط شاخههایی را نشان دهند که شما آنها را به شاخه فعلی ادغام کردهاید یا هنوز نکردهاید.
برای دیدن شاخههایی که قبلاً به شاخه فعلی ادغام شدهاند، میتوانید دستور زیر را اجرا کنید:
$ git branch --merged
iss53
* master
از آنجا که قبلاً شاخه iss53
را ادغام کردهاید، آن را در این فهرست خواهید دید.
شاخههایی که در این فهرست علامت *
جلوی آنها نیست عموماً قابل حذف با دستور git branch -d
هستند؛ چون کار آنها قبلاً در شاخه دیگری ادغام شده است و چیزی از دست نمیدهید.
برای دیدن همه شاخههایی که کارهایشان هنوز ادغام نشده، میتوانید دستور زیر را اجرا کنید:
$ git branch --no-merged
testing
این شاخه دیگر شما را نشان میدهد.
چون شامل کارهایی است که هنوز ادغام نشده، تلاش برای حذف آن با git branch -d
با شکست مواجه خواهد شد:
$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.
اگر واقعاً میخواهید شاخه را حذف کنید و آن کارها را از دست بدهید، میتوانید با گزینه -D
این کار را اجباراً انجام دهید، همانطور که پیام راهنما اشاره میکند.
نکته
|
گزینههای ذکر شده، شما همیشه میتوانید آرگومان اضافی بدهید تا وضعیت ادغام را نسبت به شاخه دیگری بدون اینکه آن شاخه را چکاوت کنید، بپرسید؛ مثلاً، چه شاخههایی به شاخه
|
تغییر نام شاخه (Changing a branch name)
گوشزد
|
شاخههایی که هنوز توسط همکاران دیگر استفاده میشوند را بازنام نکنید. شاخهای مثل master/main/mainline را بدون خواندن بخش تغییر نام شاخه اصلی (Changing the master branch name) بازنام نکنید. |
فرض کنید شاخهای دارید به نام bad-branch-name
و میخواهید آن را به corrected-branch-name
تغییر دهید، در حالی که تمام تاریخچه حفظ شود.
همچنین میخواهید نام شاخه را روی ریموت (GitHub، GitLab، یا سرور دیگر) تغییر دهید.
چگونه این کار را انجام دهید؟
برای تغییر نام محلی یک برنچ از دستور git branch --move
استفاده میکنیم:
شاخه را به صورت محلی با دستور `git branch --move` بازنام کنید:
این کار bad-branch-name
شما را با corrected-branch-name
جایگزین میکند، اما این تغییر فعلاً فقط محلی است.
برای اینکه دیگران شاخهی اصلاحشده را روی ریموت ببینند، آن را پوش کنید:
$ git push --set-upstream origin corrected-branch-name
حالا کمی وضعیت فعلی را بررسی میکنیم:
$ git branch --all
* corrected-branch-name
main
remotes/origin/bad-branch-name
remotes/origin/corrected-branch-name
remotes/origin/main
توجه کنید که شما روی شاخه corrected-branch-name
هستید و این شاخه روی ریموت موجود است.
با این حال، شاخه با نام اشتباه هنوز هم آنجا هست اما میتوانید آن را با اجرای دستور زیر حذف کنید:
$ git push origin --delete bad-branch-name
حالا نام شاخه اشتباه کاملاً با نام اصلاحشده جایگزین شده است.
تغییر نام شاخه اصلی (Changing the master branch name)
هشدار
|
تغییر نام شاخهای مثل master/main/mainline/default باعث شکستن یکپارچهسازیها، سرویسها، ابزارهای کمکی و اسکریپتهای ساخت/انتشار میشود که مخزن شما استفاده میکند. قبل از این کار، حتماً با همکارانتان مشورت کنید. همچنین، مطمئن شوید که جستجوی کاملی در مخزن خود انجام داده و همه ارجاعات به نام شاخه قدیمی را در کد و اسکریپتها بهروزرسانی کردهاید. |
شاخه محلی master
را به main
با دستور زیر تغییر نام دهید:
$ git branch --move master main
حالا شاخه محلی master
وجود ندارد چون به شاخه main
تغییر نام یافته است.
برای اینکه دیگران شاخه جدید main
را ببینند، باید آن را به ریموت پوش کنید.
این کار شاخه بازنامشده را روی ریموت در دسترس قرار میدهد.
$ git push --set-upstream origin main
حالا وضعیت زیر را داریم:
$ git branch --all
* main
remotes/origin/HEAD -> origin/master
remotes/origin/main
remotes/origin/master
شاخه محلی master
حذف شده و با شاخه main
جایگزین شده است.
شاخه main
روی ریموت موجود است.
با این حال، شاخه قدیمی master
هنوز روی ریموت هست.
همکاران دیگر تا زمانی که تغییرات بیشتری انجام ندهید، همچنان از شاخه master
به عنوان پایه کارشان استفاده خواهند کرد.
حالا چند وظیفه دیگر برای تکمیل انتقال دارید:
-
هر پروژهای که به این مخزن وابسته است، باید کد و/یا پیکربندی خود را بهروزرسانی کند.
-
فایلهای پیکربندی تست رانرها را بهروزرسانی کنید.
-
اسکریپتهای ساخت و انتشار را تنظیم کنید.
-
تنظیمات میزبان مخزن خود را برای مواردی مانند شاخه پیشفرض مخزن، قوانین ادغام و دیگر موارد مربوط به نام شاخهها بهروزرسانی کنید.
-
ارجاعات به شاخه قدیمی در مستندات را اصلاح کنید.
-
درخواستهای کشش (pull requests) که هدفشان شاخه قدیمی است را ببندید یا ادغام کنید.
بعد از انجام تمام این کارها و وقتی مطمئن شدید شاخه main
مانند شاخه master
عمل میکند، میتوانید شاخه master
را حذف کنید:
$ git push origin --delete master