بسم الله الرحمن الرحيم، الحمد لله الذي علم بالقلم، علم الإنسان مالم يعلم والصلاة والسلام على خير معلم الناس الخير محمد أما بعد:

مقدمة:

عملية كتابة الكود البرمجي تمر بعدة مراحل وهي الكتابة والتعديل والمسح و إضافة المزيد من الأكواد وهكذا، وتصل لمرحلة ما، تود أن تتراجع عن هذه التعديلات أو تريد معرفة التعديلات التي أجريت على الملف والتراجع عن تعديل بسيط مثلًا، تعتبر هذه الأشياء من أبسط الأمور التي يقدمها لك git.

يمكن النظر له بشكل مبسط على أنه ((قاعدة بيانات Database)) أو نظام ملفات ((File System)) يقوم بتخزين العمليات التي نقوم بها على الملف أو مجموعة الملفات بحيث يمكنك العودة لتلك التعديلات في أي وقت. 1


مخطط سير عمل Git Workflow:

  1. يقوم المبرمج بتعديل الملفات في مجلد المشروع الذي تعمل عليه.
  2. بعد ذلك يقوم بإضافة الملفات التي تم تعديلها إلى منطقة Staging Area: وهي المنطقة التي تنتقل إليها التعديلات التي قام بها المبرمج قبل تخزينها بشكل نهائي.
  3. يقوم بعمل commit، والتي بدورها تقوم بأخذ جميع التعديلات الموجودة في Staging Area ومن ثم تخزينها بشكل دائم إلى المستودع Repository.

الأمر init:

يستخدم لإنشاء مستودع ‫‪Repository‬‬ جديد، وهو المكان الي سيقوم git بتخزين قائمة التعديلات فيه للمشروع، يجب أن نكون في مجلد المشروع الرئيسي وكتابة الأمر التالي.

git init

ملاحظة: إنشاء المستودع الفارغ لايعني أنه سيقوم بتخزين الملفات أو التعديلات في مشروعك.


الأمر config:

إضافة معلوماتك على git، لكي يظهر هوية المستخدم الذي قام بالتعديلات:

git config --global user.email "myemail@email.com"
git config --global user.name "myname"

الأمر add:

يستخدم لمتابعة التعديلات على المف ونقله من حالة Untracked إلى حالة Tracked وله استخدام آخر هو نقل الملفات التي تم تعديلها من منطقة Staging Area إلى المستودع Repository بشكل دائم.

git add views.py
git add models.py
git add urls.py

لمتابعة التعديلات على المجلد كامل:

git add .

ملاحظة: سيتم متابعة التعديلات التي تجري على كافة الملفات في المجلد الحالي الذي نفذت فيه هذا الأمر.


الأمر status:

يستخدم الأمر status لمعرفة الملفات التي تم التعديل عليها، ومعرفة الفرع branch الحالي.

git status

الأمر commit:

هذا الأمر ببساطة هو الذي يلتقط الصورة أو حالة الملفات والخيار m خاص بوضع رسالة يقوم المبرمج بوضعها لتحفظ مع تلك الصورة، وهي توضح سبب التعديلات أو الخطأ الذي تم إصلاحه أو أي رسالة تبين الهدف من تلك التعديلات. أما الخيار a يستخدم لإضافة الملفات التي تم التعديل عليها إلى منطقة Staging Area ثم عمل commit للملفات ونقلها إلى المستودع Repository.

‫‪git‬‬ ‫‪commit‬‬ ‫‪-m‬‬ ‫‪'My‬‬ ‫'‪message‬‬
‫‪git‬‬ ‫‪commit‬‬ ‫‪-a -m‬‬ ‫‪'My‬‬ ‫'‪message

الأمر diff:

يستخدم لإظهار التعديلات التي أجريت على الملفات الحالية ومقارنتها بآخر commit:

git diff

الأمر reset:

عند استخدام add، فنحن نقوم بنقل التعديلات إلى Staging Area لتصبح جاهزة لتخزينها بشكل دائم في المستودع من خلال commit، وهنا قد يحتاج المبرمج إلى إعادتها من تلك المنطقة، أي ما قبل add، أي التراجع عن التعديلات التي قان بها المبرمج، أي تتحول حالة الملف أو مجموعة الملفات من Unstaged إلى Modified.

git reset HEAD models.py

يمتلك الأمر reset أحد الخيارات المسماة --hard، واستخدام هذا الخيار قد يكون خطير للغاية كونه قد يتسبب في التراجع عن التعديلات التي قمت بها ليس فقط من Staging Area بل من Repository.


الأمر checkout:

قد تقوم بإجراء تعديلات على ملف أو مجموعة ملفات، وبعد فترة تكتشف لأي سبب أنك تريد إلغاء كل تلك التعديلات والعودة إلى الوضع التي كانت عليه تلك الملفات قبل إجراء تلك التعديلات الأخيرة أي عودة الملف لحالته لآخر commit، هنا يوفر git أسلوب مبسط لإجراء تلك العملية.

git checkout models.py

ملاحظة: يستخدم الأمر checkout أيضًا للتنقل من Branch لآخر.

الإنتقال لفرع موجود مسبقًا بشكل محلي:

git checkout {{branch_name}}

إنشاء فرع Branch جديد والإنتقال إليه بشكل مباشر:

git checkout -b {{branch_name}}

الأمر branch:

عرض كافة الفروع Branches الحالية للمستودع المحلي:

git branch

عرض كافة الفروع Branches الحالية للمستودع المحلي والبعيد:

git branch --all
git branch -a

إنشاء فرع Branch جديد:

git branch {{branch_name}}

إعادة تسمية فرع Branch:

git branch -m {{old_branch_name}} {{new_branch_name}}

حذف فرع Branch:

git branch -d {{branch_name}}

الأمر merge:

دمج فرع Branch إلى الفرع الحالي:

git merge {{branch_name}}

الأمر rm:

لحذف ملف بشكل مباشر من مجلد المشروع ومن المستودع:

git rm models.py

لحذف مجلد بشكل مباشر من المشروع ومن المستودع:

git rm -r utils

لحذف ملف من git كمتابعة فقط، أي من Staged Area ولكن لا تريد حذفه من مجلد المشروع:

git rm --cached models.py

الأمر mv:

يستخدم لنقل الملفات من مجلد إلى مكان آخر داخل مشروعك:

git mv {{path/to/file}} {{new/path/to/file}}

يستخدم أيضًا لإعادة تسمية الملفات:

git mv {{filename}} {{new_filename}}

الأمر log:

لرؤية سجل العمليات التي حدثت على المستودع الذي تعمل عليه:

git log

سيتم عرض عدد commits التي تمت على المستودع الذي تعمل عليه، بالإضافة إلى تفاصيل كل commit من خلال عرض رقمها ومن قام بها والتاريخ والرسالة التي توضح سبب أو وصف commit، شيء مشابه لما يلي:

commit e524852999ed457e7e888c44f51dd9222bcb34d7
Author: Mr.Ahmed <xyz@gmail.com>
Date:   Mon Apr 12 22:14:11 2022 +0300

    update page about.md

لرؤية commits التي حدثت للمشروع بشكل مختصر:

git log --oneline

لرؤية commits التي حدثت على ملف أو المجلد:

git log {{path/to/file_or_directory}}

لمعرفة التفاصيل بشكل أكبر على كل commit:

git log -p

عرض الإحصائيات بشكل مختصر:

git log --stat

عرض معلومات لعدد محدد من commits:

git log -n {{number}}

للبحث برسائل commits التي تحتوي على نص معين:

git log -i --grep {{search_string}}

الأمر remote:

لعرض المستودعات التي نتعامل معها عن بعد:

git remote -v

لعرض معلومات المستودع البعيد:

git remote show {{remote_name}}

لتغير اسم مستودع بعيد:

git remote rename {{old_name}} {{new_name}}

لحذف مستودع بعيد:

git remote remove {{remote_name}}

لإضافة مستودع بعيد جديد:

git remote add {{remote_name}} {{remote_url}}

لتغير رابط مستودع بعيد:

git remote set-url {{remote_name}} {{new_url}}

الأمر clone:

لنسخ مشروع بشكل كامل والحصول على نسخة من المستودع بشكل خاص:

git clone {{remote_repository_location}}

الأمر pull:

لتحميل نسخة التغيرات التي حصلت في المستودع البعيد مع عمل دمج لها:

git pull

الأمر push:

لرفع التعديلات الموجودة في المستودع المحلي Local Repository الموجود في جهازك إلى المستودع البعيد:

git push {{remote_name}} {{local_branch}}

الأمر stash:

يستخدم لحفظ حالة المستودع الحالية، قد تود حفظ حالة المشروع والإنتقال لفرع آخر Branch دون أن تقوم بعمل commit لأنك لم تنهي التعديلات الحالية فهنا بإمكانك استخدام Stash:

git stash

ملاحظة: تستطيع تخزين أكثر من حالة.

لمعرفة قائمة الحالات التي قمت بتخزينها لكي تساعدك في الرجوع للحالة التي تريدها:

git stash list

للرجوع لحالة مخصصة سابقة بعد مشاهدة قائمة الحلات من خلال الأمر السابق:

git stash apply stash@{2}

لحذف كل الحالات:

git stash clear

الأمر clean:

قد تحتاج أحيانًا إلى إزالة جميع الملفات التي تكون حالتها Untracked في مشروعك وغير موجودة في ملف .gitignore:

git clean -f

الأمر التالي نفس الأمر السابق ولكن مع حذف المجلدات:

git clean -f -d
git clean -fd

لحذف الملفات بشكل تفاعلي:

git clean -i

لحذف المجلدات بشكل تفاعلي:

git clean -i -d

لإظهار الملفات التي يستم حذفها ولكن دون اتخاذ أي إجراء:

git clean --dry-run
git clean --dry-run -f

git clean -n
git clean -n -f

لإظهار المجلدات التي يستم حذفها ولكن دون اتخاذ أي إجراء:

git clean --dry-run -d
git clean -n -d

الأمر tag:

يستخدم لإنشاء تسميات للنسخ أو لإصدارات الكود.

عرض كافة الوسوم:

git tag

إنشاء تسمية (وسم) مع وضع رسالة:

git tag {{tag_name}} -m {{tag_message}}

لحذف تسمية موجودة مسبقًا:

git tag -d {{tag_name}}

المراجع: