git merge و get merge --no-ff چه تفاوتی دارند

git merge و get merge --no-ff چه تفاوتی دارند

git merge و get merge --no-ff  چه تفاوتی دارندDifference Between Git Merge and Git Merge --no-ff

git merge و get merge --no-ff چه تفاوتی دارند

توسط : admin
Git یک سیستم ورژن کنترل یا VCS است که در درجه اول برای مدیریت کد منبع و همچنین برای ردیابی تغییرات ایجاد شده در یک فایل یا مجموعه ای از فایل ها به کار می رود. این امر امکان میدهد ردگیری فرآیندهای فردی چندین توسعه دهنده در یک پروژه امکان پذیر باشد .

 

به عبارت ساده تر ، Git پلی است برای اتصال فاصله ای  که بین توسعه دهندگان مختلف ، در یک کار واحد ایجاد شده است. یکی از دستورات برتر Git  دستور merge git  است. این دستور دارای ترکیب های متنوعی است ، از جمله فرمان merge git --no-ff.

 

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

 

اما قبل از مقایسه این دو دستور در git ، ابتدا اجازه دهید درک کنیم که عملکرد ادغام یا merge در git دقیقاً به چه معنی است و برخی دیگر از مفاهیم مرتبط ، یعنی fast-forward merge و 3way merge  چه چیزی هستند.

 

دستور ادغام یا Git Merge

دستور git merge خطوط مختلف کد های توسعه ایجاد شده توسط شعبه یا branch را گرفته و آنها را در یک شعبه(branch) واحد ترکیب می کند. اگرچه شعبه فعلی به روز شده است تا ادغام حاصل را منعکس کند ، ولی شعبه هدف بدون تغییر باقی می ماند. دستور git معمولاً به این شکل استفاده می شود:

 

  • git checkout : شعبه فعلی را انتخاب می کند.
  • git branch -d : شاخه منسوخ هدف را حذف می کند.

 

فرایند

فرمان Git merge توالی از commit ها را در یک تاریخچه واحد و یکپارچه ترکیب می کند. فرمان با تایید دو نقطه از commit  شروع می شود که معمولاً جدیدترین commit در دو شعبه هستند که باید ادغام شوند.

 

در مرحله بعد برای این دو ، شروع به جستجوی یک commit پایه مشترک می کند. در صورت یافتن ، دستور git merge یک merge commit جدید ایجاد می کند ، که ترکیبی از تغییرات انجام شده توسط هر یک از دو commit در صف توالی commit های ادغام است.

 

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

 

آماده سازی

برای اطمینان از یک فرآیند ادغام صحیح ، موارد زیر باید قبل از انجام merge commit با دقت بررسی شوند :

تأیید شعبه دریافت کننده : برای انجام این کار ، دستور وضعیت git را برای اطمینان از این که HEAD به شعبه مربوط جهت  ادغام اشاره دارد ، اجرا کنید. اگر اینطور نیست ، از دستور < checkout <branch استفاده کنید تا به شعبه گیرنده مورد نظر بروید.

واکشی جدیدترین commit ها از راه دور : اطمینان حاصل کنید که شعبه های دریافت و ادغام مطابق با آخرین تغییر از راه دور با اجرای دستور Git fetch ، برای بیرون کشیدن آخرین commit ها از راه دور و به دنبال آن دستور Git pull  که برای اطمینان از داشتن آخرین به روزرسانی ها در شعبه اصلی است، استفاده کنید.

 

ادغام Fast Forward و 3way

fast-forward merge  وقتی انجام میشود که Git اشاره گر شعبه را به نقطه ایجاد commit ورودی برده که شاید بتواند یک merge commit جدید ایجاد کند. اگرچه این کار معمولاً هنگام انجام یک دستور git pull بدون هیچگونه تغییر محلی اتفاق می افتد ، می تواند برای دستور git merge نیز اتفاق بیفتد.

 

از آنجا که همه commit ها از شعبه هدف قابل دسترسی  هستند ، اکنون از طریق شعبه فعلی نیز در دسترس است ، fast-forward merge تاریخچه های دو شعبه را در هم می آمیزد. با این وجود ، وقتی شعبه ها جدا شده اند ، fast-forward merge  امکان پذیر نیست.

git زمانیکه یک مسیر مستقیم در شعبه هدف وجود نداشته باشد ، توسط ادغام سه طرفه ، دو شعبه را ادغام میکند.این روش از یک commit اختصاصی برای پیوند دو تاریخچه استفاده می کند. به این دلیل است که ، در ادغام 3 طرفه ، Git از سه commit برای تولید merge commit استفاده می کند. دو شعبه اکنون یک والد مشترک دارند .

 

به طور معمول ، ادغام fast forward برای ویژگی های کوچک یا رفع اشکال توسط توسعه دهندگان استفاده می شود در حالی که ادغام 3 طرفه برای ادغام ویژگی های بزرگتر کاربرد دارد.

git merge در برابر git merge --no-ff

معمولاً توسعه دهندگان برای ادغام دو شعبه از دستور git merge استفاده می کنند. دستور git دو یا چند commit را در یک تاریخچه واحد ادغام می کند. نحو کلی به این شکل است:

git merge <branch>

 

به طور پیش فرض ، فرمان ادغام git یک ادغام  fast-forward است. در صورت وجود یک مسیر خطی  در شروع شعبه فعلی تا شعبه هدف ، یک ادغام  fast-forward امکان پذیر است.

 

در این سناریو ، به جای اینکه در واقع دو شعبه با هم ادغام شوند ، Git تاریخچه commit های قبلی را به صورت یکپارچه ، از نقطه شروع شعبه فعلی  به سمت راس شعبه مورد نظر حرکت می دهد.

 

برای سناریوهایی که در طی ادغام fast-forward نیاز به merge commit دارند ، ما از فرمان ادغام Git با پرچم no-ff-- استفاده می کنیم. نحو عمومی این دستور git عبارت است از:

 

git merge --no-ff <branch>

 

دستور Git merge --no-ff شعبه مشخص شده در فرمان موجود را در شعبه فعلی ادغام می کند و حتی در صورت ادغام سریع  ، اجرای یک ادغام را تضمین می کند. این روش کمک می کند تا تمام دستورات ادغام انجام شده در مخزن git مربوط ثبت شود.

 

استفاده از پارامتر no-ff-- مانع از دستیابی فرمان Git merge  میشود که تشخیص دهد که HEAD فعلی یک والد از commit ی است که می خواهید با آن ادغام شوید.

 

عدم Fast-forward Merge

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

 

برای انجام این کار ، پارامتر no-ff-- را می توان با دستور git Merge منتقل کرد. در نتیجه ، دستور git merge ادغام commit را به جای fast-forwarding  ایجاد می کند.

 

اگر ادغام git از نوع سریع بوده و منصرف شوید ، چه می شود؟

اگر دستور ادغام Git از نوع سریع را داده باشید و اکنون منصرف شده باشید ، چه می کنید؟ آیا راهی برای برگشت این تغییرات وجود دارد؟ بله ، وجود دارد .

 

برای این کار ، به جای استفاده از پارامتر no-ff-- ، باید از پارامتر ff-only-- استفاده کنید. در چنین سناریویی ، شما می توانید به عقب برگردید و تصمیم بگیرید که اگر خطایی در طی فرآیند رخ داد ، ادغام دوباره انجام شده یا کنسل شود.

 

چگونه می توان بیش از 2 شعبه را ادغام کرد؟

فرمان git merge طیف وسیعی از استراتژی های ادغام را پشتیبانی می کند. برای ادغام بیش از دو شعبه ، دو استراتژی در دسترس است:

۱−Octopus

از این استراتژی ادغام عمدتا برای ادغام موضوعات اساسی شعبه ها  استفاده می شود. اگر بیش از دو شعبه اقدام به دریافت و یا ادغام در یک شعبه نمایند به طور پیش فرض از این استراتژی استفاده میشود . از این رو ، این استراتژی هنگام ادغام دو شعبه مورد استفاده  میگیرد.

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

 

۲−Ours

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

 

نتیجه گیری

در حال حاضر ، باید تفاوت بین ادغام git و دستورات ادغام Git --no-ff برای شما شفاف شده باشد. درک تفاوت این دو مهم است چرا که باید بتوانید هر دو دستور git را در زمان مناسب مورد استفاده قرار دهید.

اگر در مورد این مقاله نظری دارید خوشحال میشویم در بخش نظرات با ما در میان بگذارید .

 

 

برچسب ها

نظرات :

در عرض چند دقیقه برای ایجاد حساب

کاربری خود اقدام کنید


اکنون حساب کاربری خود را ایجاد کنید!


ایجاد حساب کاربری

با ثبت نام در نیلوتک از آخرین بروز رسانی های آموزش ها و مقالات سایت مطلع شوید