يدير فريق مطوِّري البرامج مفتوحة المصدر والمشرفون عليها مشاريعهم عادةً من خلال نظام غيت، وهو نظام إدارة الإصدارات الموزعة التي تدعم المشاركة.
يقدم لك هذا الدليل المُعَدّ على نمط الورقة المرجعية cheat sheet مرجعًا سريعًا للأوامر التي تفيدك في العمل والمشاركة في مستودع غيت. ولتثبيت نظام غيت وإعداده اِقرأ المقالة "كيف تساهم في المشاريع مفتوحة المصدر: ابدأ بتعلم نظام غيت Git".
إليك بعض الملاحظات قبل البدء بهذا الدليل:
- أُعِدّ هذا الدليل على نمط الورقة المرجعية وأُضيفت إليه مقتطفاتٌ مستقلة من موجّه الأوامر.
- انتقل إلى أي قسم ذي صلة بالمهمة التي تحاول تنفيذها.
- عندما ترى نصًا مظللًا ضمن الأوامر في هذا الدليل، تذكر أن تستبدل هذا النص بنصٍ يشير إلى الإيداعات commits والملفات الموجودة في مستودعك.
الإعداد والتهيئة
تحقَّق من إصدار نظام غيت لديك بالاستعانة بالأمر التالي، والذي سيؤكد أيضًا أن النظام مثبَّتٌ على جهازك:
$ git --version
يتيح لك غيت ضبط بعض الإعدادات، التي تُطبَّق على جميع المستودعات الموجودة على جهازك المحلي. على سبيل المثال، اِضبط اسم مستخدمٍ سيستخدمه غيت ليوثِّق به أية تعديلات تجريها على مستودع محلي:
$ git config --global user.name "firstname lastname"
اضبط عنوان البريد الإلكتروني ليُربَط مع كل علامة سجل محفوظة history marker على النحو التالي:
$ git config --global user.email "valid-email"
اضبط محرر النصوص الذي تفضله أيضًا:
$ git config --global core.editor "nano"
يمكنك تهيئة دليل العمل working directory الحالي على أنه مستودع غيت باستخدام الأمر init
على النحو التالي:
$ git init
لنسخ مستودع غيت مُستضاف عن بُعد، ستستخدم الأمر git clone
مع عنوان url للمستودع أو موقع الخادم (في حالة إضافة موقع الخادم، ستستخدم الأمر ssh
):
$ git clone https://www.github.com/username/repo-name
اِعرض المستودع البعيد لدليل غيت الحالي لديك:
$ git remote
للحصول على خرج مطوَّل verbose، استخدم الراية v-
على النحو التالي:
$ git remote -v
أضِف فرع غيت الأولي primary، ,الذي قد يكون عنوان url، أو مُستضافًا على خادم (في هذه الحالة اتصل بالخادم باستخدام الأمر ssh
):
$ git remote add upstream https://www.github.com/username/repo-name
التحضير للإدراج
عندما تعدل ملفًا وتضع علامةً عليه للانتقال إلى الإيداع التالي، فإنه يُعد ملفًا مُدرجًا staged. يمكن التحقق من حالة مستودع غيت لديك، بحيث يتضمن الملفات المضافة المُدرجة وغير المُدرجة على النحو التالي:
$ git status
استخدم الأمر add
لإدراج الملفات المُعدَّلة، إذ يمكنك تنفيذه عدّة مرات قبل ملف الإيداع؛ وإذا أجريت تعديلات لاحقة تريد إدراجها في الإيداع التالي، عليك تنفيذ الأمر add
مجددًا. كما يمكنك تحديد ملفٍ معين في الأمر add
على النحو التالي:
$ git add my_script.py
ويمكنك باستخدام النقطة .
إضافة جميع الملفات الموجودة في الدليل الحالي، وهذا يشمل الملفات التي تبدأ بالنقطة .
:
$ git add .
إذا أردت إضافة جميع الملفات الموجودة في الدليل الحالي إضافةً إلى الملفات الموجودة في الدلائل الفرعية، فيمكنك استخدام الراية all-
أو A-
:
$ git add -A
يمكنك إزالة ملف من مرحلة الإدراج مع الاحتفاظ بالتعديلات ضمن دليل العمل الخاص بك باستخدام الأمر reset
:
$ git reset my_script.py
الإيداع
بمجرد انتهائك من إدراج التحديثات التي أجريتها، فأنت جاهزٌ لإضافة إيداع، والذي سيسجِّل التعديلات التي أجريتها على المستودع. لإيداع ملفاتٍ مُدرجة، نفِّذ الأمر commit
وأضف رسالة إيداعٍ ذات مغزًى حتى تتمكن من متابع الإيداعات:
$ git commit -m "Commit message"
يمكنك اختصار جميع الملفات التي تتابعها من خلال إضافة إيداعٍ لها في خطوةٍ واحدة:
$ git commit -am "Commit message"
يمكنك تعديل رسالة الإيداع بإضافة الراية amend--
:
$ git commit --amend -m "New commit message"
الفروع
الفرع في غيت هو مؤشرٌ متنقلٌ لأحد الإيداعات في المستودع، ويتيح لك عزل العمل وإدارة تطوير الخصائص وعمليات الدمج. إذا أردت معرفة المزيد عن الفروع اقرأ توثيق غيت.
اعرض جميع الفروع الحالية بتنفيذ الأمر branch
، إذ ستظهر علامة النجمة (*) بجوار فرعك النشط حاليًا:
$ git branch
أنشئ فرعًا جديدًا. ستبقى في فرعك النشط حاليًا حتى تبدّل إلى الفرع الجديد:
$ git branch new-branch
بدِّل إلى أيّ فرعٍ موجود، وتحقق منه في دليل العمل الحالي لديك:
$ git checkout another-branch
يمكنك دمج عمليتي إنشاء فرع جديد والتحقق منه باستخدام الراية b-
على النحو التالي:
$ git checkout -b new-branch
أعِد تسمية فرعك على النحو التالي:
$ git branch -m current-branch-name new-branch-name
ادمج سجلات الفرع المحدد مع الفرع الذي تعمل فيه حاليًا:
$ git merge branch-name
بإمكانك إلغاء عملية الدمج في حال وجود تعارضات على النحو التالي:
$ git merge --abort
كما يمكنك تحديد إيداعٍ معيّن لدمجه باستخدام الأمر cherry-pick
وكتابة سلسلة المحارف التي تشير إلى ذلك الإيداع:
$ git cherry-pick f7649d0
عندما تدمج فرعًا ولم تعد بحاجة إليه، يمكنك حذفه على النحو التالي:
$ git branch -d branch-name
إذا لم تدمج فرعًا مع الفرع الرئيسي، لكنك متأكد من رغبتك في حذفه، فيمكنك فرض حذف الفرع:
$ git branch -D branch-name
المشاركة والتحديث
يمكنك استخدام الأمر fetch
لتنزيل التعديلات من مستودع آخر، مثل المستودع الأوّلي البعيد على النحو التالي:
$ git fetch upstream
يُستخدم الأمر التالي لدمج الإيداعات التي جلبناها fetched. تذكر أن بعض المستودعات قد تستخدِم master
بدلاً من main
:
$ git merge upstream/main
ومن أجل دفع أو نقل إيداعات الفرع المحلي إلى فرع المستودع البعيد، استخدم الأمر التالي:
$ git push origin main
ولجلب ودمج أية إيداعات من فرع المتابعة tracking البعيد:
$ git pull
الفحص Inspecting
اِعرض سجل الإيداع للفرع النشط حاليًا:
$ git log
اِعرض الإيداعات التي عدَّلت ملفًا معينًا، إذ يتبَع هذا العرض الملف بغض النظر عن إعادة التسمية:
$ git log --follow my_script.py
اعرض الإيداعات الموجودة في فرعٍ محدد وليست موجودة في الفرع الآخر، إذ سيعرض الأمر التالي الإيداعات في الفرع a-branch وغير الموجودة في الفرع b-branch:
$ git log a-branch .. b-branch
اطلع على السجلات المرجعية reflog
لتعرف آخر مرةٍ حُدِّث فيها أحدث إيداعٍ في الفروع والمراجع الأخرى ضمن المستودع:
$ git reflog
اعرض أي كائنٍ في غيت من خلال سلسلة محارف إيداعه أو القيمة المعمَّاة Hash بصياغةٍ قابلة للقراءة على النحو التالي:
$ git show de754f5
عرض التغييرات
يعرض الأمرgit diff
الفروقات بين الإيداعات والفروع وغيرها. يمكنك الاطلاع على المزيد عنها من خلال قراءة توثيق غيت. يُستخدم الأمر التالي لموازنة الملفات المُعدّلة الموجودة في مرحلة الإدراج:
$ git diff --staged
اعرض التغييرات على ما هو موجود في الفرع a-branch وغير الموجود في الفرع b-branch على النحو التالي:
$ git diff a-branch .. b-branch
اِعرض التغييرات بين إيداعين محدّدين على النحو التالي:
$ git diff 61ce3e6 .. e221d9c
تتبع مسار التغييرات من خلال حذف ملف من مشروعك ونظِّم هذا الحذف لإضافته إلى إيداع على النحو التالي:
$ git rm file
أو غيِّر مسار ملفٍ موجود، ثم نظِّم الانتقال:
$ git mv existing-path new-path
تحقَّق من سجل الإيداع لتعرف ما إذا نُقلت أية مسارات:
$ git log --stat -M
الإخفاء Stashing
ستجد أحيانًا نفسك بعد إجراء بعض التعديلات على جزءٍ من الشيفرة البرمجية وقبل الانتهاء مضطرًا إلى بدء العمل على أمرٍ آخر، وأنت لست مستعدًا لاعتماد التعديلات التي أجريتها حتى الآن، لكنك لا تريد أن يضيع عملك. في هذه الحالة، سيتيح لك الأمر git stash
حفظ تعديلاتك المحلية في مكان ما والعودة مرةً أخرى إلى دليل العمل الذي يتوافق مع أحدث إيداع HEAD وتدعى هذه العملية بعملية الإخفاء أو الادخار stashing. لإخفاء عملك الحالي:
$ git stash
اطلِّع على ما اخفيته حاليًا:
$ git stash list
تُسمى الأعمال المُخبأة كما يلي: {stash@{0، و {stash@{1 وهكذا. لعرض معلومات عن عملٍ مُخبأ stash معين:
$ git stash show stash@{0}
أضف apply
لاستخراج الملفات الموجودة في عملٍ مُخبأ حالي منه مع الاحتفاظ به:
$ git stash apply stash@{0}
إذا أردت استخراج الملفات من العمل المُخبأ ولم تعد بحاجته، أضف pop
:
$ git stash pop stash@{0}
إذا لم تعد بحاجة الملفات المحفوظة في ملفٍ مُخبأ معين، أضف drop
لإلغائه:
$ git stash drop stash@{0}
إذا كان لديك عدة أعمال مُدخرة محفوظة لم تعد تحتاج إلى استخدام أيٍّ منها، أضِف clear
لإزالتها:
$ git stash clear
تجاهل الملفات
إذا أردت الاحتفاظ بالملفات في دليل غيت المحلي لديك لكنك لا تريد إضافة إيداعٍ لهم إلى المشروع، أضِف هذه الملفات إلى ملف "gitignore." لديك حتى لا تتسبب بأية تعارضات.
استخدم محرر نصوص مثل نانو، لإضافة الملفات إلى ملف "gitignore." على النحو التالي:
$ nano .gitignore
إذا أردت أن تجد نماذج لملفات "gitignore."، اطلع على مستودع قالب gitignore. لموقع غيت هَب GitHub.
إعادة تأسيس الفروع
تتيح لنا عملية إعادة التأسيس Rebase نقل الفروع من خلال تغيير الإيداع المبنية عليه، كما تتيح لك إزالة squash الإيداعات أو إعادة صياغتها.
يمكنك بدء عملية إعادة التأسيس، إما باستدعاء عدد الإيداعات التي أنشأتها وتريد إعادة تأسيسها (العدد هو 5 في مثالنا التالي):
$ git rebase -i HEAD~5
أو يمكنك إعادة التأسيس بالاعتماد على سلسلة محارف إيداع معين أو القيمة المُعمَّاة Hash:
$ git rebase -i 074a4e5
بعد إزالة أو إعادة صياغة الإيداعات، يمكنك متابعة عملية إعادة تأسيس فرعك على أحدث إصدار من الشيفرة البرمجية الأولية للمشروع. تذكر أن بعض المستودعات قد تستخدم master بدلًا من main:
$ git rebase upstream/main
لتتعلم المزيد عن إعادة التأسيس والتحديث اقرأ كيف تعيد تأسيس طلب سحب وتحدِّثه الذي يمكن تطبيقه على أي نوع إيداعٍ تريده.
التراجع وإعادة الضبط
يمكنك التراجع عن التعديلات التي أجريتها على إيداعٍ معين باستخدام الأمر revert
، إذ يجب أن تكون شجرة العمل نظيفةً حتى يتحقق ذلك:
$ git revert 1fc6665
تحتاج أحيانًا إلى إعادة ضبط دليل شجرة العمل حتى بعد عملية إعادة التأسيس، إذ يمكنك باستخدام الأمر التالي إعادة الضبط إلى إيداعٍ معين، وحذف كافة التعديلات:
$ git reset --hard 1fc6665
لفرض دفع push أحدث إيداعٍ معروف وغير متعارض لديك إلى المستودع الأصلي، عليك استخدام force--
على النحو التالي:
$ git push --force origin main
اقتباستحذير: تكون عملية فرض الدفع إلى الفرع الرئيسي main (الأساسي master أحيانًا) غالبًا غير محبَّذة ما لم يكن لديك سببٌ وجيهٌ فعلًا لتنفيذها؛ لذلك استخدمها بحذر عند العمل على مستودعاتك الخاصة، واعمل على تجنُّبها عندما تشارك في عملٍ ما.
لإزالة الملفات والدلائل الفرعية غير المتتبعة من دليل غيت للحصول على فرع عملٍ نظيف، استخدم الأمر git clean
:
$ git clean -f -d
إذا أردت تعديل مستودعك المحلي ليبدو مثل الفرع الرئيسي الأولي الحالي (أي عندما توجد كثيرٌ من التعارضات)، يمكنك تنفيذ استعادة الإعدادات الأصلية hard reset على النحو التالي:
$ git reset --hard upstream/main
ملاحظة: سيجعل تنفيذ هذا الأمر مستودعك المحلي يبدو تمامًا مثل الفرع الأولي، وستُتلف أية إيداعات أنشأتها ولم تسحبها إلى الفرع الأولي.
الخاتمة
يتناول هذا الدليل بعض أكثر أوامر غيت شيوعًا، والتي قد تستخدمها عند إدارة المستودعات والمشاركة في البرامج.
توجد العديد من الأوامر التي قد تجدها مفيدةً لعملك على غيت. لمعرفة المزيد حول جميع الخيارات المتاحة لك، يمكنك تنفيذ الأمر التالي للحصول على معلومات مفيدة:
$ git --help
كما يمكنك قراءة المزيد حول غيت والاطلاع على ملفات توثيق غيت في قسم Git في أكاديمية حسوب وإن واجهتك أي مشكلة فأضف سؤالك في قسم الأسئلة والأجوبة لطلب المساعدة.
ترجمة -وبتصرف- للمقال How To Use Git: A Reference Guide لصاحبته Lisa Tagliaferri.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.