تخطَّ إلى المحتوى

GitHub: رفع المشروع بـ push وتحديثه بـ pull

الدرس 5 من 10 · Git و GitHub

حتى الآن، كل تاريخ مشروعك موجود على جهازك فقط. إذا تعطل الجهاز، ضاع كل شيء! وإذا أردت العمل مع صديق، أو من جهاز آخر، أو أن تعرض مشروعك على العالم، تحتاج نسخة على الإنترنت. هنا يأتي GitHub: أشهر منصة لاستضافة مستودعات Git. وفي هذا الدرس الأخير، ستتعلم أوامر التعامل مع المستودع البعيد (Remote).

  1. أنشئ حساباً مجانياً على github.com (راجع شروط العمر في الموقع، وبعض المنصات تشترط موافقة ولي الأمر).
  2. اضغط زر New لإنشاء مستودع جديد.
  3. اكتب اسمه، مثل my-site، واختر Public (عام) أو Private (خاص).
  4. إذا كان عندك مستودع على جهازك بالفعل، لا تختر إضافة README من GitHub، لتبدأ بمستودع فارغ.

سيعرض لك GitHub رابط المستودع، مثل https://github.com/sara/my-site.git.

ربط المستودع المحلي: git remote

Section titled “ربط المستودع المحلي: git remote”

داخل مجلد مشروعك:

نافذة طرفيّة
git remote add origin https://github.com/sara/my-site.git
git remote -v
الناتج
origin https://github.com/sara/my-site.git (fetch)
origin https://github.com/sara/my-site.git (push)
  • git remote add: أضف مستودعاً بعيداً.
  • origin: اسم مستعار للرابط، والعُرف أن يسمى المستودع الرئيسي origin.
  • -v: اعرض المستودعات البعيدة المرتبطة.
نافذة طرفيّة
git push -u origin main
الناتج
To https://github.com/sara/my-site.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
  • push: ارفع نقاط الحفظ الجديدة من جهازك إلى المستودع البعيد.
  • origin main: إلى origin، الفرع main.
  • -u: اربط الفرع المحلي بالبعيد مرة واحدة. بعدها يكفي أن تكتب git push فقط.

افتح صفحة المستودع على GitHub، وستجد ملفاتك وتاريخها كاملاً!

لتحميل مستودع موجود على GitHub إلى جهاز جديد، مثل حاسوبك المحمول، أو مشروع مفتوح المصدر تريد دراسته:

نافذة طرفيّة
git clone https://github.com/sara/my-site.git
الناتج
Cloning into 'my-site'...
done.

clone تنزّل المستودع كاملاً بكل تاريخه، وتربطه تلقائياً بـ origin. لا تحتاج git init ولا git remote add.

تخيّل أنك تعمل من جهازين: الكمبيوتر والحاسوب المحمول. عدّلت README.md على المحمول ورفعته بـ git push. الآن على الكمبيوتر:

نافذة طرفيّة
git pull
الناتج
From https://github.com/sara/my-site
e074d8f..52a9f5b main -> origin/main
Updating e074d8f..52a9f5b
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)

pull تجلب نقاط الحفظ الجديدة من المستودع البعيد، وتدمجها في فرعك الحالي. والآن الجهازان متطابقان.

تخيّل GitHub مثل سبورة مشتركة في الفصل: push تكتب عليها ما أنجزته، و pull تنقل منها ما كتبه الآخرون إلى دفترك.

موقف يمر به كل مبرمج: صديقك رفع تعديلاً، وأنت لم تجلبه بعد، ثم حاولت الرفع:

نافذة طرفيّة
git push
الناتج
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://github.com/sara/my-site.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.

Git يحميك هنا: يرفض الرفع حتى لا تمحو عمل صديقك. والرسالة نفسها تخبرك بالحل:

  1. git pull لجلب تعديلات صديقك ودمجها مع تعديلاتك.
  2. إذا حدث تعارض، حلّه كما تعلمت في درس الفروع.
  3. git push من جديد.
نافذة طرفيّة
git pull # ابدأ يومك بآخر التحديثات
# ... اعمل وعدّل الملفات ...
git add .
git commit -m "وصف واضح"
git push # شارك عملك

وفي فرق العمل، يعمل كل شخص في فرع خاص، ثم يرفعه ويفتح على GitHub طلب دمج (Pull Request): صفحة يراجع فيها الزملاء التعديلات ويعلقون عليها قبل دمجها في main. هكذا يعمل ملايين المطورين حول العالم، وهكذا تُبنى المشاريع مفتوحة المصدر.

  1. أنشئ حساباً على GitHub، ومستودعاً فارغاً جديداً.
  2. اربط مستودعك المحلي به بـ git remote add origin، وارفعه بـ git push -u origin main.
  3. عدّل ملف README.md مباشرة من موقع GitHub (زر القلم)، واحفظ.
  4. على جهازك، اجلب التعديل بـ git pull.
  5. تحدٍّ: انسخ مستودعك في مجلد آخر بـ git clone، وعدّل من النسختين، وجرّب الرفض ثم حله بـ pull.
  • نسيان push: تعديلاتك محفوظة على جهازك فقط، ولا يراها أحد. commit لا يرفع شيئاً.
  • العمل دون pull في البداية: تزيد فرص الرفض والتعارض. ابدأ دائماً بـ git pull.
  • رفع الأسرار: راجع .gitignore قبل أول push، فالمستودع العام يراه العالم كله.

سؤال

ما الفرق بين git commit و git push؟

سؤال

رُفض git push لأن المستودع البعيد فيه تعديلات ليست عندك. ما الحل الصحيح؟

  • GitHub يستضيف نسخة من مستودعك على الإنترنت للحماية والتعاون والعرض.
  • git remote add origin رابط يربط المستودع، و git push -u origin main يرفعه أول مرة.
  • git clone ينسخ مستودعاً كاملاً بتاريخه، و git pull يجلب التحديثات ويدمجها.
  • الرفع المرفوض يُحل بـ pull ثم push، وليس بـ --force.