پس از توسعه یافتن پروژه بازی، *سلیب* دو تن از دوستان خرابکار خود یعنی *مهدی* و *باقر* را به ریپازیتوری پروژه اضافه کرد. آنها پس از دیدن پروژه هر یک به طور مجزا و بدون هماهنگی با فرد دیگر تصمیم گرفتند تا پروژه را مطابق میل خود پیش ببرند. آنها پنج برنچ با نامهای مختلف `bagher1` و `bagher2` و `bagher3` و `mahdi1` و `mahdi2` تشکیل دادهاند. در ادامه تصویر درخت گیت این پروژه را میبینید:
| ![](https://quera.ir/qbox/view/b0xVXQCQRn/aks1.png) |
|:--------:|
| *در تصویر فوق برنچ main در پروژه به نام master وجود دارد.* |
همانطور که میبینید، *مهدی* و *باقر* به طور کلی پروژه را بهم ریختهاند. حال نوبت آن رسیده تا *سلیب* با کمک شما پروژه را دوباره به حالت قبلی خود برساند و آن را مرتب و تمیز کند. او برای تمیزکردن پروژه میخواهد تمامی برنچها و کامیتهای *باقر* و تمامی برنچها و کامیتهای *مهدی* را مرتب و دستهبندی کند. مراحل تمیز کردن پروژه را *سلیب* به مراحل زیر تقسیم کردهاست:
1. در ابتدا *سلیب* میخواهد از شرّ سه برنچ باقر خلاص شود. او میخواهد در این مرحله با کمک شما برنچ `bagher3` را درون برنچ `bagher2` مرج کند. از آنجایی که *سلیب* دارای ذهن قویایست، با اینکه نمیتواند خود کارهای خود را انجام دهد ولی در ذهن خود کار را به سرعت و دقت بسیار زیادی پیش میبرد و میداند که این مرج به کانفلیکت برمیخورد. برای رفع کانفلیکت بهوجود آمده، شما محتویات موجود در برنچ `bagher3` را نگهداری کنید (یعنی باید محتوای فایل `state.txt` برابر `This is commit 1 in bagher3 branch!` باشد.).
پس از انجام مراحل بالا، مسیج کامیت پس از مرج را برابر با `bagher3 merged` قرار دهید و **حتما** روی این کامیت تگی با نام `bagher3_merged` بزنید و مسیجی برابر با `bagher3_merged` برای این تگ قرار دهید. **توجه داشته باشید در صورت عدم انجام عملیات مرج خواسته شده و یا عدم رعایت مسیج و نام کامیت و تگ بیان شده، نمره این بخش را از دست میدهید.** همچنین پس از انجام موارد بالا، درخت پروژه به شکل زیر تغییر مییابد:
| ![](https://quera.ir/qbox/view/kOAFUD3B9J/aks2.png) |
|:--------:|
| *در تصویر فوق برنچ main در پروژه به نام master وجود دارد.* |
2. حال تغییرات باقر دو برنچ دارد، در ادامه او میخواهد از شرّ دو برنچه بودن این تغیرات نیز خلاص شود. او میخواهد در این مرحله با کمک شما برنچ فعلی `bagher2` (که در مرحله قبل برنچ `bagher3` را درون آن مرج کردیم.) را درون برنچ `bagher1` مرج کند. اینبار هم به علت ذهن قوی *سلیب*، در ذهن خود کار را به سرعت و دقت بسیار زیادی پیش میبرد و میداند که این مرج نیز به کانفلیکت برمیخورد. برای رفع کانفلیکت بهوجود آمده، شما محتویات موجود در برنچ `bagher2` را نگهداری کنید (یعنی باید محتوای فایل `state.txt` برابر `This is commit 1 in bagher3 branch!` باشد.).
پس از انجام مراحل بالا، مسیج کامیت پس از مرج را برابر با `bagher2 merged` قرار دهید و **حتما** روی این کامیت تگی با نام `bagher2_merged` بزنید و مسیجی برابر با `bagher2_merged` برای این تگ قرار دهید. **توجه داشته باشید در صورت عدم انجام عملیات مرج خواسته شده و یا عدم رعایت مسیج و نام کامیت و تگ بیان شده، نمره این بخش را از دست میدهید.** همچنین پس از انجام موارد بالا، درخت پروژه به شکل زیر تغییر مییابد:
| ![](https://quera.ir/qbox/view/af4PDCuRR3/aks3.png) |
|:--------:|
| *در تصویر فوق برنچ main در پروژه به نام master وجود دارد.* |
3. حال *سلیب* به سراغ تغیرات *مهدی* میرود، در ادامه او میخواهد از شرّ دو برنچه بودن تغیرات *مهدی* نیز خلاص شود. او میخواهد در این مرحله با کمک شما برنچ `mahdi2` را به برنچ `mahdi1`، `rebase` کنید. اینبار هم به علت ذهن قوی *سلیب* ، در ذهن خود کار را به سرعت و دقت بسیار زیادی پیش میبرد و میداند که این *rebase* به کانفلیکت برمیخورد. برای رفع کانفلیکت بهوجود آمده، شما محتویات موجود در برنچ `bagher2` را نگهداری کنید (یعنی باید محتوای فایل `state.txt` برابر `This is commit 1 in mahdi2 branch!` باشد.).
پس از انجام مراحل بالا، *rebase* را ادامه دهید و **حتما** پس از اتمام *rebase* روی کامیتی که روی آن قرار دارید، تگی با نام `mahdi2_rebased` بزنید و مسیجی برابر با `mahdi2_rebased` برای این تگ قرار دهید. **توجه داشته باشید در صورت عدم انجام عملیات مرج خواسته شده و یا عدم رعایت مسیج و نام تگ بیان شده، نمره این بخش را از دست میدهید.** همچنین پس از انجام موارد بالا، درخت پروژه به شکل زیر تغییر مییابد:
| ![](https://quera.ir/qbox/view/IPalX1HXZE/aks4.png) |
|:--------:|
| *در تصویر فوق برنچ main در پروژه به نام master وجود دارد.* |
### نحوه انجام و ارسال
برای این تمرین شما، یک ریپازیتوری ریموت در کوئرا در نظر گرفته شده است که شما باید نسخه نهایی پروژهتان را برای داوری به آن ریپازیتوری ارسال کنید. برای این کار، به صورت زیر عمل کنید.
+ با فشردن دکمه «گیت» در بخش ارسال پاسخ پایین همین صفحه، لینک ریپازیتوری ریموت را بسازید و آن را کپی کنید.
+ در کامپیوترتان این ریپازیتوری را کلون کنید تا نسخه اولیه پروژه دریافت شود.
+ موارد خواسته شده در تمرین را روی پروژه کلونشده انجام دهید. میتوانید هر تعدادی کامیت انجام دهید و تگ بزنید.
<details class="red" open>
<summary>
**ارسال پاسخ**
</summary>
برای ارسال پاسخ از طریق سایت، ابتدا باید فایلها و تغیرات درون ریپازیتوری خود *push* کنید. شما باید تمامی کامیتها و تگهایتان را برای سیستم داوری کوئرا ارسال کنید. برای اینکار از دستورات زیر استفاده کنید:
```bash
git push -u --all -f
git push origin --tags -f
```
سپس به [این آدرس](https://quera.ir/qgit/submit/?problem_id=125633) برای تست شدن و نمره گرفتن پاسختان بروید. پس از آن پروژه شما با موفقیت برای داوری ارسال شده و میتوانید نمرهتان را در صفحه <همه ارسالها> موجود در منوی سمت راست همین صفحه مشاهده کنید.
</details>
+ در صورتی که با ارسال پاسخ، نمره کامل را دریافت نکردید میتوانید از دکمه ریست بالای پروژه ارسال پاسختان استفاده کنید. پس از فشردن دکمه و تایید برای ریست، ریپازیتوری شما ریست میشود و **باید دوباره پروژه اولیهتان را کلون کنید.**
<details class="yellow">
<summary>
**محل دکمه ریست**
</summary>
![](https://quera.ir/qbox/view/JiJ3QtQYhL/reset.png)
</details>
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.