رفتن به محتوای اصلی
  1. وبلاگ/

چرا git pull خوب نیست؟!

·2 دقیقه· loading · loading · · ·
Tip Git Github
محمدمعین عربی
نویسنده
محمدمعین عربی
بیو من
فهرست مطالب

مقدمه
#

چند روز پیش به یه ویدیو با عنوان با حال “از git pull هیچ وقت استفاده نکن” بر خوردم. با خودم گفتم مگه چه مشکلی می‌تونه داشته باشه؟

داستان از چه قراره؟
#

داستان از این قراره که همه ما وقتی میخوایم آخرین تغییرات یه رپو رو از جایی مثل گیتهاب دریافت کنیم، از دستور git pull استفاده می‌کنیم. این دستور در اصل دوتا دستور در دل یک دستوره. در اصل وقتی ما دستور git pull رو اجرا می‌کنیم، اون پشت اول دستور git fetch اجرا میشه که میاد برنچ ریموتی به اسم <origin>/<branch_name> رو توی سیستم لوکالمون آپدیت می‌کنه و بعد با دستور git merge این برنچ رو روی برنچ اصلی با نام <branch_name> مرج می‌کنه.

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

زمانی که شما دستور pull را اجرا میکنید ولی کامیت دیگری در رپوی ریموت قرار گرفته

مثلا در تصویر بالا، ما یه هم‌گروهی به اسم John داریم که هر دومون از کامیت A شروع به کار کردیم. John زودتر از ما کار خودش رو انجام داده، کامیت C رو اعمال کرده و تغییرات رو پوش کرده. حالا اگر ما بخوایم تغییرات خودمون رو پوش کنیم، گیت ارور میده و از ما می‌خواد که قبلش pull انجام بدیم. اگر توی چنین شرایطی pull انجام بدیم، حتی اگر هم کانفلیکتی رخ نده، دو برنچ لوکال و ریموت مرج میشن. مثل عکس پایین:

تولید شدن یک کامیت جدید برای merge

یعنی یک کامیت اضافه‌تر!

حالا همین رو تصور کنید ولی با تعداد رخداد بیشتر. برنچ ما پر میشه از کامیت‌های الکی و اضافی که گراف کامیت‌ها رو کثیف می‌کنه:

شلوغ شدن گراف کامیت از کامیت های مرج

نکته اینجاست که کانفلیکتی هم اگر نداشته باشیم، این اتفاق می‌افته. پس راه بهتر این جور موقع‌ها چیه؟

راه بهتر
#

به جای اینکه pull انجام بدیم و مرج اتفاق بیفته، rebase می‌کنیم. rebase کردن باعث میشه تغییرات برنچ ریموت پشت سر کامیت ما قرار بگیره:

git pull --rebase

بازسازی برنچ لوکال با کامیت های جدید در برنچ ریموت

حالا ممکنه سوال پیش بیاد اگر کانفلیکت داشتیم چطور؟

ناچارن از همون دستور git pull استفاده می‌کنیم تا resolve انجام بدیم و بعدش هم مرج.

مقاله‌های مرتبط

ساختن و اجرا کردن فایل jar در زبان جاوا
·5 دقیقه· loading · loading
Educational Java Jar IDE