بسم الله الرحمن الرحيم
الأخطاء لا مفر منها فنحن بشر، فكيف ونحن في البرمجة وما يخصها؟
لما تخطئ تود لو أنك ما أخطأت، لو أنك عدت فتتراجع عما أخطأت فيه، وفي برمجية جِت قد تتراجع عن أي خطأ فعلته، مثل ترحيل ملف إلى مرحلة الإعداد بالخطأ أو نسيان تعديل ملف بعد الإيداع، ومقال اليوم في التراجع عما حدث.
التراجع عن الإيداع
هب أنك أودعت commit كل شيء لكنك نسيت تعديل ملف وإضافة شيء إليه، فكيف تتراجع عن الإيداع وتضيف إليه التعديل المراد؟
١) عليك أن تعدل الملف المراد،
٢)، ثم ادخله مرحلة الإعداد
٣) ثم اكتب الأمر التالي:
git commit --amend
اللاحقة amend– معناها التعديل أو التصليح والتحسين. الأمر مع هذه اللاحقة يقول لجِت: خذ ما تجده في مرحلة الإعداد ثم انقله إلى آخر إيداع تمَّ.
إن كتبت الأمر ولم تعدل على أي ملف فإن الأمر سيعدل لك رسالة آخر إيداع سيُفتح، عند كتابته سيُفتح لك محرر نصوص وأنت انزل بالأسهم في لوحة المفاتيح إلى الأسفل، واكتب في سطر جديد الرسالة التي تود كتابتها، هذه الرسالة ستُزيل الأولى، فتنبَّه!
انظر هذا المثال، سأودع ما أحدثته:
git commit -m "Initial commit"
ثم سأعدل على الملف الذي نسيت إضافة التعديل فيه، وبعدها أدخله مرحلة الإعداد:
git add file
والآن سأكتب الأمر الذي يأخذ الملف ويدخله في آخر إيداع تمَّ:
git commit --amend
إذا أردت إضافة التعديل إلى الإيداع الأخير دون فتح المحرر فاكتب:
git commit --amend --no-edit
تغيير المحرر
سيُفتح لك كل مرة محرر النصوص عند التراجع، لأن جِت يحتاج محرر نصوص كل مرة حتى تكتب الرسالة، لذا عليك تعيين محرر النصوص المحبب إليك.
تعيين محرر النصوص يكون بالأمر الآتي، سأعين محرر النصوص عندي إلى Vim:
git config --global core.editor vim
إذا أردت تعيينه إلى Visual Studio Code فاكتب:
git config --global core.editor "code --wait"
إن كنت نسيت ما يعنيه global– فراجع هذا الدرس أيها المهمل المستعجل:
التراجع عن ملف في مرحلة الإعداد
هب أنك عدلت ملفين وأردت إضافة واحد منهما إلى الإيداع القادم لكنك أخطأت وأضفتهما معًا باستعمال النجمة (وتعني الكل) هكذا:
git add *
فكيف تتراجع عن الملف في مرحلة الإعداد؟
الترجع عنه بالأمر التالي:
git reset HEAD file_name
استبدل file_name باسم الملف المُراد
الأمر reset لن نشرحه في هذا الدرس، ويكفيك منه اليوم ما درسته عنه وهو التراجع عن ملف في مرحلة الإعداد، وسنشرحه بتفصيل في فصول قادمه إن شاء اللّٰه. واحذر من استعماله فالأمر خطر وقد يفسد المشروع عليك إن أسأت استعماله.
التراجع عن ملف مُعدَّل
إن أردت التراجع عن ملف عدلته وتريد حذف كل التعديلات وارجاعه إلى حاله الأخير في آخر إيداع فهذا يتأتى لك بالأمر التالي:
git checkout -- file_name
استبدل file_name باسم الملف المُراد
واحذر من هذا الملف فهو أيضا أمر خطر، فإنك إن طبقته فلن تستعيد ما عدلته، وكل التعديلات ستذهب في مهب الريح.
التراجع عن ملف في مرحلة الإعداد باستعمال git restore
أتى الإصدار 2.23.0 من جِت بأمر جديد هو (git restore)، وهو البديل عن git reset وسنستعمله اليوم
للتراجع عن ملف أدخلناه في مرحلة الإعداد
صيغته:
git restore --staged file_name
استبدل file_name باسم الملف المُراد
وانظر في هذا الأمر ما أوضحه، قلنا له staged–، أي ملف يُعدَّ، في مرحلة الإعداد
وإذا أردنا التراجع عن ملف معُدَّل كتبنا نفس الأمر بلا staged–:
git restore file_name
واحذر من هذا الأمر فإنك إن طبقته فلن تسترجع ما عملته على الملف!
واعلم رعاك الله أنك إذا كتبت:
git status
كان أخبرك في الأسفل عن الأوامر التي تستعملها وبيَّن هو لك ذلك.
إهمال الملفات
هب أن عندك مجموعة من الملفات تنتهي بامتداد ما وأنت لا تريد من جِت أن يتتبعها لكثرتها، مثل ملفات السجلات logs، أو لأهميتها عندك، فمثلًا بعض هذه الملفات يحوي كلمة السر وأنت لا تريد من جِت أن يتبعها، فما الحيلة لذلك؟
ما دام الأمر هكذا فعند جِت الحل!
سننشئ ملفًا مخفيًّا، يبدأ بنقطة، اسمه:
.gitignore
كلمة ignore معناها الإهمال، فالغرض من الملف أن كل شيء فيه سيُهمَل ولن يراقبه أو يتتبعه جِت.
سنضيف إلى الملف أسماء الملفات التي لا نريد ظهورها، وإن كانت الملفات كثيرة؟
مثلا عندك ملفات كثيرة تنتهي بالامتداد o. أو a. وأنت لا تريد من جت أن يراقبها، سنكتب في الملف هذا:
*.o
وإن أردنا كليهما كتبنا:
*.[oa]
وهذا السطر يقول: كل شيء ينتهي بالامتدا o.، لا يهم ما قبله في مكان النجمة. وقد تستعمل في الملف التعابير النمطية regular expressions.
أمثلة للملف:
إن أردت إضافة تعليق إلى ملف فاستعمل علامة #:
# هذا تعليق
*.a
ذا أردت الاستثناء من هذا التعميم، الذي يقول كل ملف ينتهي بالامتداد a. وأردت مراقبة الملف lib.a:
!lib.a
إن أردت إهمال مجلد كامل فاكتب (استبدل /build باسم المجلد المُراد):
build/
وإن أردت إهمال ملفات تنتهي بالامتداد txt في هذا المجلد فاكتب:
build/*.txt
إن أردت إهمال كل الملفات التي تنتهي بالامتداد pdf. في المجلد doc وكل المجلدات الفرعية فيه فاكتب:
doc/**/*.pdf
الخاتمة
ها قد وصلنا إلى نهاية المقال، وها أنا أخط بقلمي الخطوط الأخيرة لهذا المقال الشائق، وأرجو إني قد وفِّقت في الشرح.
وفي نهاية الأمر لا يسعني سوى أن أشكرك على حسن قراءتك لهذا المقال، وأني لبشر أصيب وأخطِئ، فإن وفِّقت في طرح الموضوع فمن اللّٰه عز وجل وإن أخفقت فمن نفسي والشيطان.
أرجو منك تقييم كفاءة المعلومات من أجل تزويدي بالملاحظات والنقد البناء في خانة التعليقات أو عبر حساب الموقع، والسلام عليكم ورحمة اللّٰه تعالى وبركاته.