5 أوامر Git أساسية يجب أن تعرفها مع أمثلة عملية
يُعد نظام التحكم في الإصدارات Git أداة لا غنى عنها للمطورين، ومع ذلك، حتى المستخدمين ذوي الخبرة يجدون أنفسهم أحيانًا يبحثون عن كيفية تنفيذ مهام أساسية. هذه المقالة هي محاولة لتبسيط بعض هذه المهام وتقديم مرجع سهل الوصول إليه للأوامر الأكثر استخدامًا، لتكون دليلاً لك ولي.
أتذكر مقولة زميل لي ذات مرة: “كل شيء ممكن مع Git، ولا شيء يُفقد فيه”. قد لا يكون الجزء الأول صحيحًا تمامًا، لكنني أحتفظ به في ذهني في كل مرة أحاول فيها القيام بشيء باستخدام Git. هذا الاعتقاد يدفعني للبحث عن الأمر المناسب الذي سيساعدني على إنجاز ما أحتاجه. إذا كنت جديدًا في عالم Git، فأنا أدعوك لتبني هذا الاعتقاد أيضًا.
في هذا المقال، سنتعلم كيفية تنفيذ المهام التالية:
- إضافة المستودعات البعيدة (
Remote Repositories). - تغيير عناوين
URLللمستودعات البعيدة. - حذف فرع (
Branch) محليًا وبعيدًا. - دمج ملف من فرع إلى آخر.
- التراجع عن التزام (
Commit) محليًا وبعيدًا.
على الرغم من أن هذا المقال يستهدف الأشخاص ذوي المعرفة الأساسية بـ Git، إلا أنني سأبذل قصارى جهدي لشرح المصطلحات قدر الإمكان لضمان الفهم الشامل.
1. إضافة المستودعات البعيدة (Remote Repositories)
المستودعات البعيدة هي نسخ من مشاريعك مخزنة على الإنترنت (مثل GitHub أو GitLab) أو في أي مكان آخر يمكن الوصول إليه. تُعد إضافة مستودع بعيد طريقة لإخبار Git بمكان تخزين شيفرتك المصدرية. يمكن أن يكون هذا عنوان URL لمستودعك الخاص، أو نسخة (fork) لمستخدم آخر، أو حتى خادمًا مختلفًا تمامًا.
عندما تقوم باستنساخ (clone) مستودع، يقوم Git ضمنيًا بإضافة هذا المستودع كـ origin remote لك. لإضافة مستودع Git جديد، يمكنك استخدام الأمر التالي:
git remote add <shortname> <url>
حيث <shortname> هو اسم فريد للمستودع البعيد (عادةً ما يكون origin أو upstream)، و <url> هو عنوان URL للمستودع الذي ترغب في إضافته.
على سبيل المثال، إذا أردت إضافة مستودع باسم upstream، يمكنني القيام بذلك كالتالي:
git remote add upstream https://github.com/sarahchima/personal-website.git
تذكر أن <shortname> يمكن أن يكون أي شيء تختاره، لكن يجب أن يكون فريدًا، أي مختلفًا عن أسماء المستودعات البعيدة التي لديك بالفعل. من المستحسن أيضًا أن يكون اسمًا يسهل عليك تذكره.
لعرض قائمة بعناوين URL البعيدة التي أضفتها، قم بتشغيل الأمر التالي:
git remote -v
ستظهر لك قائمة بأسماء المستودعات البعيدة وعناوين URL الخاصة بها. ولكن ماذا لو أردت تغيير هذه العناوين؟ لننتقل إلى الأمر التالي في Git.
2. تغيير عناوين URL للمستودعات البعيدة
هناك عدة أسباب قد تدفعك لتغيير عنوان URL لمستودع بعيد. على سبيل المثال، قد تحتاج إلى الانتقال من استخدام عناوين URL من نوع HTTPS إلى عناوين SSH لمشروع تعمل عليه، أو قد يتغير موقع المستودع على الخادم. لتنفيذ ذلك، يمكنك استخدام الأمر التالي:
git remote set-url <an-existing-remote-name> <url>
لكي يعمل هذا الأمر، يجب أن يكون <an-existing-remote-name> اسمًا لمستودع بعيد موجود بالفعل. هذا يعني أنه لن يعمل إذا لم تكن قد أضفت هذا الاسم البعيد من قبل.
باستخدام المثال السابق، إذا أردت تغيير عنوان URL البعيد لـ upstream، سأقوم بذلك كالتالي:
git remote set-url upstream git@github.com:sarahchima/personal-website.git
تذكر دائمًا تشغيل git remote -v للتحقق من أن التغيير قد تم بنجاح. كفى حديثًا عن المستودعات البعيدة، دعنا ننتقل إلى شيء مختلف.
3. حذف فرع (Branch) محلياً وبعيداً
الفرع (branch) هو نسخة من المستودع تختلف عن المشروع الرئيسي الذي تعمل عليه. إذا لم تكن على دراية بفروع Git وكيفية إضافتها، فقد ترغب في قراءة المزيد عنها. غالبًا ما نحتاج إلى حذف الفروع بعد دمجها أو عندما لم تعد هناك حاجة إليها.
كيفية حذف فرع محلي
لحذف فرع محليًا، تأكد من أنك لست على الفرع الذي تريد حذفه. يجب عليك الانتقال إلى فرع آخر (باستخدام git checkout) ثم استخدام الأمر التالي:
git branch -d <name-of-branch>
على سبيل المثال، إذا أردت حذف فرع اسمه fix/homepage-changes، سأقوم بما يلي:
git branch -d fix/homepage-changes
يمكنك تشغيل git branch في طرفيتك (terminal) للتأكد من إزالة الفرع بنجاح.
كيفية حذف فرع بعيد
في بعض الأحيان، قد تحتاج إلى حذف فرع قمت بدفعه (pushed) بالفعل إلى مستودع بعيد. لحذف فرع عن بعد، يمكنك استخدام الأمر التالي:
git push <remote-name> --delete <name-of-branch>
حيث <remote-name> هو اسم المستودع البعيد الذي تريد حذف الفرع منه (غالبًا ما يكون origin). إذا أردت حذف الفرع fix/homepage-changes من origin، سأقوم بذلك كالتالي:
git push origin --delete fix/homepage-changes
بعد تنفيذ هذا الأمر، سيتم حذف الفرع من المستودع البعيد.
4. دمج ملف من فرع إلى آخر
في بعض الأحيان، قد ترغب في دمج محتوى ملف معين من فرع إلى فرع آخر. على سبيل المثال، قد ترغب في دمج محتوى الملف index.html الموجود في الفرع master لمشروع ما إلى الفرع development. كيف يمكنك القيام بذلك؟
أولاً، انتقل إلى الفرع الصحيح (الفرع الذي تريد دمج الملف إليه) إذا لم تكن قد فعلت ذلك بالفعل. في حالتنا، هو الفرع development:
git checkout development
ثم قم بدمج الملف باستخدام الأمر git checkout --patch:
git checkout --patch master index.html
إذا كنت ترغب في استبدال ملف index.html بالكامل في الفرع development بالملف الموجود في الفرع master، يمكنك حذف العلامة --patch. هذا سيؤدي إلى استبدال الملف دون طلب تأكيد:
git checkout master index.html
كما يمكنك حذف العلامة --patch إذا لم يكن ملف index.html موجودًا في الفرع development من الأساس؛ في هذه الحالة، سيتم إضافة الملف مباشرة.
5. التراجع عن التزام (Commit)
هناك أوقات تقوم فيها بتنفيذ التزامات (commits) غير صحيحة وترغب في التراجع عنها. أحيانًا، قد تكون قد دفعت هذه التغييرات بالفعل إلى فرع بعيد. كيف يمكنك التراجع عن هذا الالتزام أو حذفه؟ دعنا نبدأ بالتراجع عن التزام محلي.
كيفية التراجع عن التزام محلي
إحدى الطرق التي يمكنك من خلالها التراجع عن التزام محلي هي باستخدام git reset. على سبيل المثال، إذا أردت التراجع عن آخر التزام تم إجراؤه، يمكنك تشغيل هذا الأمر:
git reset --soft HEAD~1
العلامة --soft تحافظ على التغييرات التي أجريتها على الملفات التي التزمت بها، حيث يتم التراجع عن الالتزام فقط وتبقى التغييرات في منطقة التجهيز (staging area). ومع ذلك، إذا كنت لا ترغب في الاحتفاظ بالتغييرات التي أجريت على الملفات، يمكنك استخدام العلامة --hard بدلاً من ذلك:
git reset --hard HEAD~1
ملاحظة مهمة: يجب استخدام العلامة --hard فقط عندما تكون متأكدًا تمامًا أنك لا تحتاج إلى التغييرات. كما أن HEAD~1 يشير إلى الالتزام الأخير. إذا أردت التراجع عن التزام سابق لذلك، يمكنك استخدام git reflog للحصول على سجل بجميع الالتزامات السابقة. ثم استخدم أمر git reset مع تجزئة الالتزام (commit hash) – وهو الرقم الذي تحصل عليه في بداية كل سطر من سجل التاريخ.
على سبيل المثال، إذا كانت تجزئة الالتزام الخاصة بي هي 9157b6910، سأقوم بذلك:
git reset --soft 9157b6910
كيفية التراجع عن التزام بعيد
هناك أوقات ترغب فيها في التراجع عن التزام قمت بدفعه إلى مستودع بعيد. يمكنك استخدام git revert للتراجع عنه محليًا ثم دفع هذا التغيير إلى الفرع البعيد. على عكس git reset، لا يقوم git revert بإعادة كتابة التاريخ، بل ينشئ التزامًا جديدًا يعكس التغييرات التي تم إجراؤها في الالتزام الأصلي.
أولاً، احصل على تجزئة الالتزام (commit hash) باستخدام git reflog:
git reflog
ثم قم بالتراجع عنه. بافتراض أن تجزئة الالتزام الخاصة بي هي 9157b6910، سأقوم بما يلي:
git revert 9157b6910
سيفتح هذا محرر نصوص للسماح لك بكتابة رسالة التزام جديدة للتراجع. احفظ وأغلق المحرر.
أخيرًا، ادفع هذا التغيير (الالتزام الجديد الذي يعكس التراجع) إلى الفرع البعيد:
git push origin <your-branch-name>
تأكد من استبدال <your-branch-name> باسم فرعك الحالي.
ملخص الأوامر
في هذا المقال، قمنا بتغطية خمسة أوامر Git أساسية لا غنى عنها لأي مطور، مع أمثلة عملية وشروحات وافية. لقد تعلمنا كيفية:
- إضافة مستودعات بعيدة جديدة لمشاريعك.
- تغيير عناوين
URLللمستودعات البعيدة الموجودة. - حذف الفروع، سواء كانت محلية أو تم دفعها إلى مستودع بعيد.
- دمج محتوى ملفات محددة بين الفروع المختلفة.
- التراجع عن الالتزامات (
commits)، سواء كانت محلية أو تم دفعها عن بعد، باستخدام أدوات مثلgit resetوgit revert.
آمل أن يكون هذا الدليل قد قدم لك قيمة مضافة ومرجعًا مفيدًا في رحلتك مع Git. قد أكتب في المستقبل عن المزيد من الإمكانيات التي يوفرها Git. شكرًا لقراءتك.
الخلاصة التقنية
تُظهر هذه الأوامر الخمسة قوة ومرونة Git كأداة للتحكم في الإصدارات. فهم كيفية إدارة المستودعات البعيدة، والتعامل مع الفروع بفعالية، والقدرة على التراجع عن الأخطاء، هي مهارات أساسية لأي مطور يعمل في بيئة تعاونية. استخدام git reset بحذر لعدم إعادة كتابة التاريخ المشترك، وgit revert لإنشاء سجل تراجع واضح، يعكسان أفضل الممارسات في الحفاظ على سلامة تاريخ المشروع. إتقان هذه الأوامر لا يسهل فقط سير العمل اليومي، بل يساهم أيضًا في بناء مشاريع برمجية أكثر استقرارًا وتنظيمًا.