حسین سلیمانی
حسین سلیمانی
خواندن ۵ دقیقه·۱ سال پیش

اموزش 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
استفاده از دستور 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
استفاده از دستور 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
دستور squash در git rebase

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

بعد از ذخیره فایل بالا این دو commit با هم یکی میشود و شکل ریپازتوری ما به شکل زیر تغییر می کند.

بعد از squash
بعد از 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

بعد از اجرای دستور بالا شکل ریپازتوری ما به شکل زیر تغییر می کند.

بعد از استفاده از fixup
بعد از استفاده از fixup



در این مطلب سعی کردم تمام دستورات git rebase را(pick ,squash ,fixup ,reword ,edit) را با مثال توضیح بدهم که امیدوارم برای شما مفید بوده باشد.



git rebasegitاموزش گیتgit squashگیت ریبیس
برنامه نویس hossien014.github.io
شاید از این پست‌ها خوشتان بیاید