دریافت تغییرات از گیتهاب — git pull و fetch
گرفتن تغییرات جدید از مخزن ریموت با git pull، تفاوت pull و fetch و مدیریت تعارض هنگام دریافت.
git pull — دریافت و ادغام
git pull تغییرات جدید مخزن ریموت را دانلود و مستقیم در شاخه محلی شما ادغام میکند:
git pull origin main
خروجی نمونه:
remote: Enumerating objects: 5, done.
Unpacking objects: 100% (5/5), done.
From github.com:username/my-project
* branch main -> FETCH_HEAD
a1b2c3d..e5f6g7h main -> origin/main
Updating a1b2c3d..e5f6g7h
Fast-forward
README.md | 4 ++++
1 file changed, 4 insertions(+)
pull = fetch + merge
در واقع git pull دو کار پشتصحنه انجام میدهد:
- git fetch: دانلود تغییرات ریموت (بدون اعمال)
- git merge: ادغام آنها در شاخه فعلی
تفاوت pull و fetch
| ویژگی | git fetch | git pull |
|---|---|---|
| دانلود تغییرات | ✅ | ✅ |
| اعمال در کد شما | ❌ فقط ذخیره میکند | ✅ فوراً merge میکند |
| امکان بررسی قبل از ادغام | ✅ عالی | ❌ |
| ریسک تعارض غافلگیرکننده | هیچ | ممکن است |
| سرعت و سادگی | نیاز به قدم اضافه | یک دستور ⭐ |
قانون سرانگشتی: pull برای کار روزمره (وقتی مطمئنید)، fetch وقتی میخواهید اول ببینید دیگران چه کردهاند بعد تصمیم بگیرید.
سناریوی fetch حرفهای
# ۱. فقط دانلود:
git fetch origin
# ۲. دیدن چه چیزی جدید آمده:
git log main..origin/main --oneline
# e5f6g7h افزودن بخش نصب به README
# ۳. دیدن تفاوتها:
git diff main origin/main
# ۴. اگر راضی بودید، ادغام:
git merge origin/main
کدام شاخه pull میشود؟
اگر با -u شاخهها را وصل کرده باشید، فقط git pull کافی است:
git pull
# Already up to date. (همهچیز بهروز است)
تعارض هنگام pull
اگر شما و ریموت یک بخش را تغییر داده باشید:
git pull
# CONFLICT (content): Merge conflict in README.md
# Automatic merge failed; fix conflicts and then commit the result.
همان فرایند حل تعارض merge معمولی است (مبحث ۱۶): فایل را ویرایش کنید، نشانهها را حذف کنید، git add و git commit.
pull با rebase (پیشرفته)
برای تاریخچه خطیتر، بعضیها pull را با rebase انجام میدهند:
git pull --rebase origin main
یعنی کامیتهای محلی شما روی تغییرات جدید ریموت «بازپخش» میشوند — تاریخچه تمیزتر اما مفهوم پیچیدهتر. فعلاً همین بدانید که وجود دارد؛ در فصل Rebase کامل یاد میگیرید.
عادت طلایی
قبل از شروع هر روز کاری و قبل از هر push، یک
git pull بزنید! این کار تعارضها را کوچک و نادر نگه میدارد.خلاصه
git pull= دانلود + ادغام فوریgit fetch= فقط دانلود (برای بررسی)- قبل از کار روزانه و قبل از push، حتماً pull کنید
- تعارض pull مثل تعارض merge حل میشود
این مبحث بخشی از دوره آموزش کامل Git است.