سناریوی اول

بگذارید بگوییم شما دسته ای از فایل ها را انجام داده اید و متوجه شده اید که پیغام تأیید انجام این فایل ها را دریافت نکرده اید، شما نمی خواهید که پیام تأیید را تغییر دهید. اگر شما یک متخصص گیت باشید برای انجام این کار می توانید از git commit استفاده کنید.

سناریوی دوم برای انجام این کار

بگذارید این طور بگوییم، فرض کنید شما می خواهید 6 فایل را انجام دهید اما به صورت اشتباهی شما تنها 5 فایل را انجام می دهید. ممکن است فکر کنید که می توانید یک فایل جدید بسازید و آن را به کارهایی که قبلاً انجام داده اید اضافه کنید، این رویکرد هیچ گونه مشکلی ندارد، اما برای این که بتوانید تاریخچه ی کارهای خود را نگهداری کنید بهتر است که این فایل را به نحوی به صورت واقعی به فایل های قبلی خود اضافه کنید. اگر شما یک متخصص گیت باشید می توانید از git commit _amend استفاده کنید و این کار را می توان به شکل زیر انجام داد:

git add file6

git commit –amend –no-edit

--no-edit به این معنا است که پیغام انجام کار تغییر نمی کند.

سناریوی سوم برای انجام این کار

هر زمان که شخصی به عنوان متخصص گیت کاری را انجام می دهد، نام و ایمیل او ذخیره می شود. به صورت کلی زمانی که شما یک گیت را برای اولین بار راه اندازی می کنید، در واقع نام نویسنده و آدرس ایمیل را ست کرده اید. بنابراین زمانی که یک متخصص گیت کاری را انجام می دهد شما نام و ایمیل او را در اختیار دارید.

این در واقع به آن معناست که در یک پروژه ی خاص می توانید از ایمیل متفاوتی استفاده کنید. برای این کار به عنوان یک متخصص گیت تنها کافی است با استفاده از دستور زیر آدرس ایمیل خود را برای این پروژه ثبت کنید:

git config user.email “your email id”

بیایید این طور بگوییم که شما به عنوان یک متخصص گیت فراموش کرده اید که آدرس ایمیل را تنظیم کنید و اولین کار خود را انجام داده اید. به عنوان یک متخصص گیت می توانید از دستور Amend استفاده کنید تا نام نویسنده ای که کار قبلی را انجام داده است را تعویض کنید. نویسنده ای که کار را انجام داده است می تواند با استفاده از دستور زیر عوض شود:

git commit –amend –author “Author Name <Author Email>”

نکته ی مهم برای یادداشت:

از دستور amend فقط در محیط محلی خود استفاده کنید. دستور amend در محیط remote می تواند سردرگمی های بسیار زیادی ایجاد می کند.

اشتباه من سردرگمی زیادی ایجاد کرده است، چگونه آن را حل کنم؟

بگذارید این طور بگویم، فرض کنید به عنوان یک متخصص گیت شما بر روی یک قطعه از کد کار می کنید، می دانید که این کد تقریباً 10 روز طول می کشد که کامل شود. در این ده روز توسعه دهندگان دیگر می توانند در محیط ریموت بر روی کد کار کنند.

این یک تمرین خوب است که بتوانید کدهای محیط محلی را با کدهای بخش ریموت سازگار کنید. این کار بعدا و زمانی که تعداد درخواست های شما زیاد شود از ادغام ناسازگاری ها جلوگیری خواهد کرد. بنابراین شما می توانید تصمیم بگیرید که تغییرات را هر دو روز یک بار از درون محیط ریموت بیرون بکشید.

هر زمان که شما کد را از محیط ریموت به داخل محیط محلی می کشید، یک کار جدید ادغامی در محیط محلی شما ساخته می شود. این به آن معنا است که تاریخچه ی کار محلی شما کارهای ادغامی زیادی را دارا می باشد که این عامل می تواند برای بیننده گیج کننده باشد.

چگونه تاریخچه ی کارها را مرتب تر کنیم؟

این دقیقا همان جایی است که rebase به کمک شما که یک متخصص گیت هستید می آید. اگر به عنوان یک متخصص گیت این سوال برایتان پیش آمده است که چگونه تاریخچه ی کارها را مرتب تر کنید بهتر است ادامه این مطلب که درباره rebase است را مطالعه کنید.

Rebasing چیست؟

بگذارید با یک مثال این موضوع را برای شمایی که متخصص گیت هستید، توضیح دهیم.

1.      شاخه Release دارای سه عمل است، Rcommit1، Rcommit2 و Rcommit3.

2.     در واقع شما زمانی شاخه ویژگی خود را می سازید که شاخه Release تنها یک شاخه داشته باشد. 

3.      شما دو عمل Fcommit1 و Fcommit2 را به شاخه ی ویژگی ها اضافه کرده اید.

4.      هدف نهایی شما به عنوان یک متخصص گیت این است که عملیات ها را از شاخه Release گرفته و به شاخه ویژگی ها بدهید.

5.      شما باید از rebase برای انجام این کار استفاده کنید.

6.      اجازه دهید نام شاخه Release را release قرار دهیم و نام شاخه ویژگی را نیز feature قرار دهیم.

7.      عملیات rebase کردن با استفاده از دستور زیر انجام می شود:

git checkout feature

git rebase release

 

عملیات Rebase کردن

در حین Rebase کردن هدف شما این است که مطمئن شوید شاخه ویژگی آخرین کد را از شاخه Release دریافت کند.

عملیات Rebase سعی می کند که هر عملیات را یکی یکی اضافه کند و سازگاری آن ها را نیز بررسی کند. آیا این کار گیج کننده است؟

اجازه دهید این موضوع را توسط یک نمودار برای شما توضیح دهیم.

این نمودار برای شما به عنوان یک متخصص گیت توضیح می دهد که در واقع در Rebase کردن چه چیزی اتفاق می افتد:

مرحله اول

1-      زمانی که شما دستور را اجرا می کنید، شاخه ویژگی به اول شاخه Release اشاره می کند.

2-      حالا شاخه ویژگی دارای سه عملیات Rcommit1، Rcommit2 و Rcommit3 است.

3-      شما ممکن است تعجب کرده باشید که چه چیزی بر سر Fcommit1 و Fcommit2 آمده است.

4-      Fcommit1 و Fcommit2 هنوز هم وجود دارند و در مراحل بعدی مورد استفاده قرار می گیرند.

مرحله دوم

1-      حالا گیت سعی می کند که Fcommit1 را به شاخه ویژگی اضافه کند.

2-      اگر ناسازگاری وجود نداشته باشد Fcommit1 بعد از Rcommit3 اضافه خواهد شد.

3-      اگر ناسازگاری وجود نداشته باشد گیت به شما به عنوان یک متخصص گیت یک نوتیفیکیشن خواهد داد و شما می توانید به عنوان یک متخصص گیت این ناسازگاری را به صورت دستی حل کنید. بعد از این که این ناسازگاری حل شد با استفاده از دستورات زیر می توانید عملیات rebase را ادامه دهید.

git add fixedfile

git rebase –continue

مرحله سوم

1-      زمانی که Fcommit1 اضافه شد گیت سعی می کند که Fcommit2 را نیز اضافه کند.

2-      دوباره اگر ناسازگاری وجود نداشته باشد Fcommit2 بعد از Fcommit1 اضافه می شود و عملیات rebase با موفقیت انجام می شود.

3-      اگر ناسازگاری وجود داشته باشد، گیت به شما به عنوان متخصص گیت یک نوتیفیکیشن می دهد و شما باید این مشکل را به صورت دستی حل کنید. با استفاده از همان دستورات که در مرحله دوم گفته شد می توانید این ناسازگاری را حل کنید.

4-      بعد از این که تمام عملیات Rebase تمام شد، شما متوجه می شوید که شاخه ویژگی دارای Rcommit1، Rcommit2،Rcommit3، Fcommit1 و Fcommit2 می باشد.

نکاتی برای یادداشت

1-      هر دو عملیات Rebase و ادغام در گیت برای متخصص گیت مفید هستند و نمی توان گفت که یکی بهتر از دیگری است.

2-      زمانی که شما ادغام می کنید در واقع شما یک عمل دارید ولی در Rebase این گونه نیست.

3-      یک تمرین خوب برای متخصص گیت شدن این است که در جاهای مختلف از دستورات استفاده کنید. از rebase زمانی استفاده کنید که در حال به روز رسانی محیط کد زنی محلی خود با آخرین کد محیط ریموت هستید. از ادغام زمانی استفاده کنید که می خواهید درخواست ها را با هدف ادغام از شاخه ویژگی به شاخه Release یا شاخه Master بکشید.

4-      استفاده از rebase تاریخچه عملیات را تغییر می دهد. اما قبل از آن باید گفت که استفاده از تغییرات تاریخچه عملیات دارای ریسک های خاصی می باشد. بنابراین مطمئن شوید که هیچ گاه از rebase بر روی یک کد استفاده نخواهید کرد مگر این که آن کد در محیط ریموت باشد. همیشه از rebase برای تغییر تاریخچه ی عملیات محیط کد زدن خود استفاده کنید.

5-      اگر rebase در محیط ریموت تمام شود می تواند سردرگمی های بسیار زیادی را ایجاد کند چرا که توسعه دهنده های دیگر نمی توانند تاریخچه ی جدید را شناسایی کنند.

6-      اگر rebase در محیط ریموت تمام شود می تواند مسئله های زیادی را زمانی که سایر توسعه دهندگان سعی می کنند آخرین کد را از محیط ریموت بیرون بکشند، ایجاد کند. بنابراین دوباره تکرار می کنیم، به عنوان یک متخصص گیت همواره از rebase فقط در محیط محلی استفاده کنید.

به شما تبریک می گوییم!

حالا شما یک متخصص گیت هستید، در این مقاله شما موارد زیر را یاد گرفتید که برای یک متخصص گیت بسیار ضروری می باشد:

1-      استفاده از دستورات amend

2-      عملیات rebase

هر دوی این مفاهیم بسیار کاربردی هستند. به عنوان یک متخصص گیت وارد دنیای گیت شوید و تلاش کنید که مفاهیم بیشتری را درباره ی این موضوع یاد بگیرید تا بتوانید در آینده استفاده های بیشتری از گیت به عنوان یک متخصص گیت بکنید.