اموزش git rebase به زبان ساده با مثال

بسم الله الرحمن الرحیمگیت ریبیس'Git rebase' چیست؟با استفاده از git rebase میتوانید مسیج یک commit را تغییر دهید و یا دو commit مختلف را با هم یکی کنید و یا اینکه ترتیب قرار commit ها را عوض کنید.مثلا یک commit را با دیگری جابجا کنید. و حتی میتوانید محتوی یک commit را به صورت کلی تغییر دهید .برای درک بهتر به مثال های زیر توجه کنید.ریپازتوری که برای مثال استفاده میکنم به شکل زیر است . پنج commit دارد که میخواهیم git rebase را روی آنها تمرین کنیم.برای شروع باید از دستور زیر استفاده کنید.git rebase --interactive HEAD~4عددی که بعد از HEAD می آید باید حداقل یک عدد کمتر از تعداد commit های شما باشد مثلا در اینجا ما از 4 استفاده کردیم زیرا تعداد commit های ما 5 عدد است.دستور بالا در یک ترمینال تکست ادیتور ,چیزی شبیه فایل زیر باز میکند که شما با تغییر متن این فایل تغییراتی در commit ها و تاریخچه آنها ایجاد می کنید. در این مثال ما میخواهیم "fourth commit add newfile" را قبل از "second commit قرار دهیم" برای این کار باید این فایل متنی را به ترتیب زیر تغییر دهیم و خارج شویم.pick 8363f75 fourth commit add newfile pick 6ba07f0 second commit pick 2c0568b third commit pick c311512 fifth commitوقتی پیام "Successfully rebased and updated refs/heads/master." را دریافت کردیم,یعنی اینکه عملیات با موفقیت انجام شد و شکل ریپازتوری ما به شکل زیر تغییر کرد و "fourth commit add newfile" به رده دوم انتقال پیدا کرده است.تغییر مسیج یک commit با استفاده از rewordحالا میخواهیم "fourth commit add newfile" را تغییر نام بدهیم و مسیج آن را به "my custom message" تغییر دهیم.برای اینکار دوباره از دستور "git rebase --interactive HEAD~4" استفاده می کنیم .در این فایل مانند تصویر زیر دستور پشت "fourth commit add newfile" را که دستورpick است را به reword تغییر دهید و فایل را سیو کنید و خارج شوید.استفاده از دستور reword در git rebaseبعد از سیو و خروج از فایل بالا یک فایل دیگر مانند تصویر زیر باز می شود که در آنجا می توانید message جدید برای commit خود انتخاب کنید .کافی است بجای "fourth commit add newfile" پیام جدید خود را بنویسید که من قصد دارم این متن را "my custom message" جایگزین قبلی کنم. سپس فایل را ذخیره و خارج شوید.تغییر پیام یک کامییتبعد از از انجام عملیات بالا ریپازتوری ما به شکل زیر تغییر می کند.ویرایش محتوی یک commit با استفاده از editاگر بخواهیم به یک commit قدیمی برگردیم مثلا "my custom message" و تغییراتی در آنجا انجام بدهیم و دوباره به HEAD که در مثال ما "fifth commit" است برگردیم و کار را ادامه دهیم باید از دستور edit در git rebase استفاده کنیم. دوباره از دستور "git rebase --interactive HEAD~4" استفاده می کنیم تا فایل rebase باز شود و در پشت "my custom message" دستور edit را می نویسیم.استفاده از دستور edit در git rebaseبعد از اجرای این دستور باید بروید و تغییراتی که میخواهید را اعمال کنید .مثلا من در فایل newfile.md یک خط جدید اضافه می کنم.اضافه کردن خط جدید بعد از اعمال تغییرات برای ذخیره باید این تغییر را ابتدا با استفاده از دستور زیر اضافه کنید.git add .سپس با دستور زیر ان را commit کنید .git commit --amendسپس برای اینکه از rebase خارج شوید دسور زیر را اجرا کنید. البته بعضی مواقع به بعد از commit به صورت خودکار از rebase خارج می شود .git rebase --continue یکی کردن دو commit با استفاده از squashدر این مرحله می خواهیم "second commit" را با "third commit" یکی کنیم. برای اینکار دوباره با استفاده از "git rebase --interactive HEAD~4" فایل rebase را باز می کنیم . پشت "third commit" از دستور squash استفاده می کنیم. این دستور به بالای سر خود نگاه می کند و اگر commit با دستور pick وجود داشت آن را با خودش یکی می کند . در تصویر زیر می بیند که بالا "third commit" دقیقا "second commit" با دستور pick قرار دارد پس این دو بعد از ذخیره این فایل باید یکی بشوند. دستور squash در git rebaseبعد از ذخیره فایل بالا یک فایل جدید مانند تصویر زیر باز می شود که به شما می گویید پیام message ترکیب این دو commit باید چه باشد . شما میتوانید پیام دلخواه خود را بنویسید یا بدون انجام تغییر این فایل را ذخیره کنید.بعد از ذخیره فایل بالا این دو commit با هم یکی میشود و شکل ریپازتوری ما به شکل زیر تغییر می کند.بعد از squashیکی کردن دو commit با دستور fixupدستور fixup مانند squash است با این تفاوت که دیگر از شما نمیخواهد که message را مشخص کنید. این دستور به صورت خودکار message کامییت بالایی را انتخاب می کند.برای اینکار ابتدا دستور "git rebase --interactive HEAD~3" را اجرا می کنیم . توجه داشته باشید که عدد بعد از HEAD را به 3 تغییر دادم زیرا در مرحله قبل یکی از تعداد commit ها کم شد .دستور fix up کامییت "second commit" را با commit بالایی خود که دستور pick دارد یعنی "my custom message" ترکیب می کند و از پیام commitبالایی استفاده می کند. استفاده از fixup در git rebaseبعد از اجرای دستور بالا شکل ریپازتوری ما به شکل زیر تغییر می کند. بعد از استفاده از fixupدر این مطلب سعی کردم تمام دستورات git rebase را(pick ,squash ,fixup ,reword ,edit) را با مثال توضیح بدهم که امیدوارم برای شما مفید بوده باشد.