منو سایت

git rebase در مقابل git merge – کدام بهتر است؟

 تاریخ انتشار :
/
  وبلاگ


بحث های زیادی در مورد ادغام git و git rebase وجود دارد که کدام بهتر است. امروز در وبلاگ خود در مورد Git Rebase vs Merge، همه ابهامات شما را در مورد Git Rebase و Git Merge برطرف خواهیم کرد. هر دو تکنیک برای یک هدف مورد استفاده قرار می گیرند، بنابراین به دلیل شباهت هایی که دارند درک آنها کمی دشوار است. در پایان وبلاگ متوجه خواهید شد که چه زمانی باید از Git Rebase در مقابل Merge استفاده کنید.

دستورات Git Merge و Git Rebase برای ترکیب کار چندین توسعه دهنده در یک کد واحد استفاده می شود. هدف نهایی هر دو این دستورات یکسان است، اما استفاده از آنها متفاوت است. امروز در این وبلاگ سعی خواهیم کرد Git Merge در مقابل Git Rebase را درک کنیم.

اگر اهل مطالعه نیستید، در اینجا ویدیویی در مورد Git Rebase در مقابل ادغام وجود دارد که به شما کمک می کند تا آنچه در این وبلاگ نوشته شده است را درک کنید.

بنابراین، این وبلاگ موضوعات زیر را پوشش می دهد:

Git چگونه کار می کند؟

برای درک عملکرد Git، باید دو مفهوم اساسی در Git را درک کنیم که عبارتند از Git commit و Git branch. بگذارید این دو کلمه را به ترتیب درک کنیم.

تعهد چیست؟

Commit به عنوان محلی که کد و تغییرات آن ذخیره می شود تعریف می شود. اجازه دهید مثالی بزنیم و از نمودار زیر به طور خلاصه در مورد آن بحث کنیم:

git rebase در مقابل git merge - کدام بهتر است؟شکل 1: تغییرات ایجاد شده در commit ذخیره می شوند

در شکل: 1، فرض کنید چهار فایل پایتون داریم. ما آنها را در Git ذخیره کردیم. این چهار فایل پایتون در یک commit ذخیره خواهند شد. هر commit یک commit-id دارد، بگذارید در مورد ما 1234 باشد. حال فرض کنید با افزودن یک فایل پایتون دیگر تغییراتی در کد ایجاد کرده ایم. در git این تغییرات به عنوان یک commit دیگر با commit-id 14343 دیگر ذخیره خواهند شد. این را می توان در شکل 2 مشاهده کرد. بنابراین هر زمان که ما تغییری ایجاد کنیم، یک تعهد جدید ایجاد می کند.

git rebase در مقابل git merge - کدام بهتر است؟شکل 2: تغییرات ایجاد شده در مخزن به عنوان یک commit جدید با یک شناسه commit جدید ذخیره می شود.

شعبه چیست؟

یک شاخه نمایشی از نسخه های جدا شده مختلف کد است. اجازه دهید برای درک این موضوع مثالی بزنیم، فرض کنید وب سایتی دارید که در حال حاضر در حال اجرا است. وب سایت چیزی شبیه این به نظر می رسد.

نمونه --merge --git rebase در مقابل merge --adureka
شکل 3: نمونه وب سایت قبل از تغییر

شما می خواهید ویژگی های بیشتری را به این وب سایت اضافه کنید. برای این کار باید کد وب سایت را تغییر دهید. اما اگر در حال تغییر کد هستید، نمی خواهید تغییرات در وب سایت اصلی که مستقر شده است منعکس شود. پس چیکار میکنی؟ در حالت ایده آل، کد این وب سایت را در یک پوشه جدید کپی کنید. تغییراتی در کد ایجاد کنید و بعد از اینکه تغییرات را نهایی کردید، کد را در پوشه اصلی قرار می دهید، درست است؟ اجازه دهید درک کنیم که چگونه می توانیم کار بالا را در git انجام دهیم.

بنابراین، در git شعبه هایی برای جداسازی نسخه های مختلف کد داریم. به طور پیش فرض، تمام کد شما در یک شاخه اصلی ذخیره می شود. بنابراین، وب سایتی که در بالا به شما نشان دادیم شعبه اصلی است. حالا نمی‌خواهیم کد شعبه اصلی را لمس کنیم، می‌خواهیم کد شعبه اصلی را در یک مکان جدید کپی کنیم، جایی که می‌توانیم از کد استفاده کنیم یا آن را تغییر دهیم. بنابراین، استاد بر شاخه تأثیر نمی گذارد. بنابراین، ما یک شاخه جدید از شاخه اصلی ایجاد می کنیم، اجازه دهید آن را ‘شاخه ویژگی’ بنامیم. اکنون، هر تغییر جدیدی که در شاخه ویژگی ایجاد کنید، روی کد موجود در شاخه اصلی تأثیری نخواهد داشت.

git rebase در مقابل ادغام - adureka

شکل 4: شاخه اصلی و شاخه ویژه

هنگامی که تغییرات را انجام دادید، ما تغییرات را از شاخه «ویژگی» به «شاخه اصلی» «ادغام» می کنیم. و حالا تغییرات ایجاد شده در شاخه ویژگی روی شاخه اصلی نیز وجود خواهد داشت.

git rebase در مقابل ادغام - adureka

شکل 5: ادغام شاخه ویژگی با شاخه اصلی

اگر مثال وب سایت فوق را در نظر بگیریم، تغییرات پس از ادغام را می توان در تصویر زیر مشاهده کرد:

hello world - ادغام - git rebase در مقابل merge - adureka
شکل 6: وب سایت تغییرات پس از ادغام تغییرات در شاخه اصلی را نشان می دهد.

اگر ادغام را متوجه نشدید، نگران نباشید همه چیز در بخش بعدی مشخص خواهد شد.

ادغام چیست؟

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

ادغام گیت تکنیکی است که برای شامل تغییرات از یک شاخه به شاخه دیگر استفاده می شود.

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

قبل از ادغام - git rebase در مقابل merge - adureka
شکل 7: قبل از ادغام

در شکل 7: قبل از ادغام، می بینیم که در شاخه اصلی چند commit وجود دارد. پس از commit ‘2’ در master یک شاخه ویژگی ایجاد کردیم. بعداً تغییراتی در شاخه ویژگی در قالب commit های A و B ایجاد کردیم. همچنین از commit 3 تغییراتی در شاخه اصلی ایجاد کردیم.

در سناریوی فعلی، شاخه اصلی دارای کد commit های 1،2 و 3 است، اما شامل تغییرات commit های A و B از شاخه ویژگی نیست.

به طور مشابه، از آنجایی که شاخه ویژگی از master در commit ‘2’ منشعب شده است، تغییرات کد از commit های 1،2، a و b دارد، اما هیچ تغییری از commit 3 در master ندارد.

در زیر، ما شاخه ویژگی را در master ادغام کرده‌ایم، پس بیایید ببینیم چه اتفاقی افتاده است.

ادغام - git rebase در مقابل merge - adurekaشکل 8: پس از ادغام

ما شاخه ویژگی را در master ادغام کردیم که منجر به commit 4 می شود. commit 4 در master تمام تغییرات کد را دارد یعنی commit های 1،2، 3، a و b. حالا، وقتی ادغام را فهمیدیم، بیایید انواع مختلفی از ادغام را که می توانیم در git انجام دهیم، درک کنیم. در Git دو نوع ادغام وجود دارد:

اجازه دهید این دو را با جزئیات درک کنیم

git ادغام
ادغام Git یکی از تکنیک‌های ادغام در Git است که در آن لاگ‌های commit در شاخه‌ها حفظ می‌شوند.

بیایید مثالی بزنیم اگر commit 1،2،3 با 3 commit در شاخه اصلی و شاخه ویژگی به عنوان commit A و B داشته باشیم. اگر عملیات ادغام git را انجام دهیم، A و B با 4 commit در شاخه اصلی ادغام می شوند. این در شکل 9 نشان داده شده است.

ادغام - git rebase در مقابل merge - adureka
شکل 9: قبل و بعد از ادغام git.

منفعت:

  • گزارش‌ها بسیار دقیق هستند و می‌توانند به درک تاریخچه کامل چگونگی و زمان وقوع هر ادغام کمک کنند
  • اشتباهات را به راحتی می توان پیدا کرد و برطرف کرد.

صدمه:

  • منجر به یک گزارش/تاریخچه ناشیانه می شود
  • خیلی کاربر پسند نیستgit merge - git rebase در مقابل merge - adureka

شکل 10: مثالی که یک مخزن با چندین شاخه را نشان می دهد که با استفاده از git-merge ادغام شده اند.

git-rebase
Rebase Git شبیه به git merge است، اما در این تکنیک لاگ ها پس از ادغام اصلاح می شوند. Git rebase برای حذف محدودیت ادغام، یعنی خطی کردن گزارش تاریخچه مخزن معرفی شد.

اگر commit 1،2،3 را با 3 commit در شاخه اصلی و شاخه ویژگی به عنوان commit A و B داشته باشیم، مثال بزنیم. اگر عملیات git rebase را انجام دهیم، commit های A و B در شاخه اصلی به عنوان commit 4 و 5 دوباره انجام می شوند و هیچ گزارشی از شاخه های ویژگی وجود نخواهد داشت. این در شکل 12 نشان داده شده است.

قبل و بعد
شکل 12: قبل و بعد از Git Rebase

منفعت:

  • سیاههها خطی هستند
  • ادامه پروژه آسان است.

صدمه:

  • ما نمی توانیم زمان و نحوه ادغام commit ها در شاخه هدف را پیگیری کنیم

git merge در مقابل git rebase:

بیماریتغییر پایه
git merge دستوری است که به شما امکان می دهد شاخه های Git را ادغام کنید.Git rebase دستوری است که به توسعه دهندگان اجازه می دهد تغییرات را از یک شاخه به شاخه دیگر ادغام کنند.
تاریخچه کامل commit های ادغام در گزارش ادغام git نشان داده خواهد شد.لاگ ها در rebase git خطی هستند زیرا commit ها مجدداً پایه گذاری می شوند
تمام commit های شاخه ویژگی به عنوان یک commit به شاخه اصلی اضافه می شوند.همه کامیت ها rebase می شوند و به همان تعداد commit به شاخه اصلی اضافه می شود.
ادغام git زمانی استفاده می شود که شاخه هدف یک شاخه مشترک باشدزمانی که شاخه هدف، شاخه خصوصی است، باید از rebase git استفاده شود

چه زمانی از Git Merge در مقابل Git Rebase استفاده می کنیم؟

اجازه دهید این را با استفاده از یک مثال درک کنیم، لطفاً به نمودار زیر مراجعه کنید:

شکل 13

شکل 13: تفاوت مخزن پس از ادغام git در مقابل git rebase را نشان می دهد.

در git merge، با نگاهی به نمودار انتهایی، هیچ commit A و B از شاخه ویژگی نیامده است. با این حال، در نمودار git-rebase، درک اینکه a و b از کجا آمده اند دشوار است. بنابراین، زمانی که می‌خواهیم تیم ما گزارش‌ها را به‌گونه‌ای بفهمد که بتواند تشخیص دهد که هر commit از کجا آمده است، ادغام git را انجام می‌دهیم. زمانی از Git Rebase استفاده می‌کنیم که لاگ‌های موجود در مخزن توسط شخص دیگری ارجاع داده نمی‌شوند. به طور خلاصه، زمانی که روی شاخه هایی کار می کنیم که توسط توسعه دهندگان دیگر قابل مشاهده نیستند، می توانیم از Git Rebase استفاده کنیم. و زمانی از git merge استفاده می کنیم که شاخه هدف و منبع توسط توسعه دهندگان دیگر قابل مشاهده باشد.

چگونه می توان از Git Rebase و Git Merge با هم استفاده کرد؟

بیایید مثالی بزنیم اگر پروژه ای داریم که دارای یک شاخه اصلی با 3 به عنوان 1،2،3 و 2 شاخه ویژگی A، B در شاخه ویژگی 1 و C در شاخه ویژگی 2 است، D همان کاری را انجام می دهد که در شکل نشان داده شده است. 14.

شکل 14

شکل 14: نمایش مثال بالا

فرض کنید توسعه دهنده A روی شاخه 1 ویژگی کار می کند.

برای آزمایش کد، شاخه 2 ویژگی شاخه دیگری ایجاد می کند، تغییراتی در آن ایجاد می کند و با commit های C و D نهایی می کند.
او نمی خواهد کسی در مورد شعبه خصوصی او بداند، زیرا غیر ضروری است. بنابراین، او می تواند ویژگی 2 را به ویژگی 1 تغییر دهد.

rebase - git rebase در مقابل merge - edurec
حالا او می تواند در نهایت شاخه ویژگی 1 را در master ادغام کند که نتیجه آن در تصویر زیر است.

ادغام - git rebase در مقابل merge - adurekaدر بالا نشان داده شده است که گزارش نهایی از دیگر توسعه دهندگان چگونه خواهد بود. آنها فقط می توانند commit های انجام شده را در شاخه ویژگی 1 ببینند که بعداً با commit 4 در شاخه اصلی ادغام شد.

با این کار به وبلاگ Git Merge در مقابل Git Rebase پایان می دهیم. ما مطمئن هستیم که تمام ابهامات شما در مورد Git Merge در مقابل Git Rebase باید تا کنون برطرف شده باشد. اگر نه، توصیه می کنیم ابتدا به اصول Git نگاه کنید، برای اطلاعات بیشتر به وبلاگ آموزش Git ما مراجعه کنید.

همچنین، اگر قصد دارید مهندس Devops شوید و به کمک حرفه ای نیاز دارید، آموزش گواهینامه Devops Edureka را بررسی کنید و توسط مهندسین Devops در سطح جهانی از سراسر جهان تدریس می شود!