git commit

اللقطات الأساسية

تسجيل التغييرات في المستودع


ينشئ الأمر 'git commit' commit جديدًا يحتوي المحتوى الحالي للفهرس (منطقة التجهيز) ورسالة تصف التغييرات. الـ commit الجديد ابن مباشر لـ HEAD ويصبح الرأس الجديد للفرع الحالي. كل commit لقطة دائمة في تاريخ المشروع يمكن الرجوع إليها أو مقارنتها أو استعادتها في أي وقت.

الصيغة

git commit [-a] [-m <msg>] [--amend] [--no-edit] [-v] [-n] [--dry-run] [-s] [-S] [--] [<pathspec>...]
[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار

الخيارات

انقر على أي خيار لتوسيعه

مبتدئ (8)

استخدم الرسالة المعطاة رسالةً للـ commit. يمكن تكراره لرسائل من عدة فقرات.

موصى بهمناسب للرسائل القصيرة؛ استخدم المحرر للعنوان مع المتن

مثال

git commit -m "Add login feature"

جهّز تلقائيًا كل الملفات المتتبَّعة المعدّلة والمحذوفة قبل الـ commit. لا يضيف الملفات الجديدة غير المتتبَّعة.

عند الحاجةيتخطّى مراجعة التجهيز، ولا يتضمن أبدًا الملفات الجديدة غير المتتبَّعة

مثال

git commit -a -m "Update all config files"

استبدل رأس الفرع الحالي بـ commit جديد. استخدمه لإصلاح رسالة آخر commit أو إضافة ملفات منسية. ينشئ hash جديدًا للـ commit.

عند الحاجةآمن على الـ commits غير المدفوعة؛ ويعيد كتابة التاريخ إن كانت مدفوعة

مثال

git commit --amend -m "Fixed message"

اعرض الـ diff للتغييرات المجهّزة في قالب رسالة الـ commit. يساعدك على مراجعة ما تحفظه أثناء كتابة الرسالة.

موصى بهيعرض الـ diff أثناء كتابة الرسالة

مثال

git commit -v

اعرض ما سيُحفظ دون إنشاء commit فعلًا. ممتاز للتحقق قبل الحفظ.

عند الحاجةيعاين ما سيُسجَّل دون تسجيل

مثال

git commit --dry-run

أخفِ ملخّص الـ commit الذي يُظهر الملفات المتغيّرة والإضافات/الحذف.

عند الحاجةيخفي ملخّص الـ commit — للسكربتات أساسًا

مثال

git commit -q -m "Silent commit"

افتح المحرر لرسالة الـ commit حتى مع -m أو -F أو -C. يتيح لك تعديل الرسالة أكثر.

عند الحاجةيفتح المحرر حتى عندما تكون -m أو -F أو -C قد أعطت رسالة

مثال

git commit -m "Initial message" -e

استخدم رسالة الـ commit المختارة دون فتح محرر. يُستخدم كثيرًا مع ‎--amend لإضافة ملفات دون تغيير الرسالة.

عند الحاجةيعيد استخدام الرسالة الحالية، عادةً مع ‎--amend

مثال

git commit --amend --no-edit

متوسط (10)

اقرأ رسالة الـ commit من الملف المعطى. استخدم '-' للقراءة من الإدخال القياسي.

عند الحاجةيأخذ الرسالة من ملف أو من stdin — للسكربتات والرسائل الطويلة

مثال

git commit -F commit-message.txt

ابدأ محرر الرسالة بمحتوى الملف المعطى (يضبطه commit.template افتراضيًا). ترك القالب دون تغيير يلغي الـ commit؛ ولا أثر له حين يقدّم -m أو -F الرسالة.

عند الحاجةيبدأ من قالب رسائل commit للفريق

مثال

git commit -t .gitmessage

خذ كائن commit موجودًا وأعد استخدام رسالته ومعلومات تأليفه (بما فيها ختم الوقت) عند إنشاء الـ commit.

عند الحاجةيعيد استخدام رسالة commit آخر وتأليفه كما هما

مثال

git commit -C HEAD~1

مثل -C، لكنه يفتح المحرر لتعدّل الرسالة. يعيد استخدام معلومات التأليف ويتيح لك تعديل النص.

عند الحاجةيبدأ من رسالة commit آخر ويتيح لك تحريرها

مثال

git commit -c HEAD~1

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

عند الحاجةيجهّز المسارات المعطاة إضافةً إلى ما هو مجهّز بالفعل

مثال

git commit -i extra-file.js -m "Include additional file"

احفظ فقط محتوى شجرة العمل للملفات المحددة؛ وتبقى التغييرات المجهّزة الأخرى مجهّزة لوقت لاحق. هو الافتراضي عند تحديد مسارات.

عند الحاجةيسجّل المسارات المعطاة فقط — وهو الافتراضي أصلًا عند إعطاء مسارات

مثال

git commit -o urgent-fix.js -m "Hotfix"

استخدم واجهة اختيار patch التفاعلية لاختيار التغييرات التي تُحفظ. يتيح لك حفظ أجزاء من الملفات.

موصى بهاختيار الأجزاء وتسجيلها في خطوة واحدة

مثال

git commit -p

أضف سطر Signed-off-by في نهاية رسالة الـ commit. يُستخدم لإقرار أن لك حق تقديم الشيفرة (Developer Certificate of Origin).

عند الحاجةأضفه عندما يشترط المشروع توقيع DCO

مثال

git commit -s -m "Add feature"

عطّل إضافة سطر Signed-off-by. يلغي ‎--signoff سابقًا في سطر الأوامر (مثلًا من اسم مستعار).

عند الحاجةيلغي ‎--signoff سابقًا في سطر الأوامر نفسه

مثال

git commit --no-signoff -m "Skip signoff"

ضمّن مخرجات git status في قالب رسالة الـ commit المعروض في المحرر. مفعّل افتراضيًا، ومفيد لإلغاء ‎--no-status.

عند الحاجةيُدرج قائمة الحالة في قالب المحرر (الافتراضي)

مثال

git commit --status

متقدم (12)

تجاوز مؤلف الـ commit. حدده بالتنسيق 'Author Name <email@example.com>'.

عند الحاجةيَنسب العمل إلى صاحبه؛ وفي البرمجة الثنائية يُفضَّل سطر Co-authored-by

مثال

git commit --author="John Doe <john@example.com>" -m "Fix bug"

تجاوز تاريخ التأليف المستخدم في الـ commit. يقبل تنسيقات مختلفة مثل ISO 8601 وRFC 2822 أو تواريخ نسبية.

عند الحاجةيستبدل تاريخ التأليف؛ نادرًا ما تحتاجه

مثال

git commit --date="2025-01-15 10:30:00" -m "Backdated commit"

مع ‎--amend أو -C أو -c (أو عند الحفظ بعد cherry-pick فيه تعارض)، اجعلك أنت — منفّذ الـ commit — مؤلفًا للـ commit الناتج وجدّد ختم وقت التأليف.

عند الحاجةيطالب بالتأليف عند amend أو عند إعادة استخدام رسالة

مثال

git commit --amend --reset-author

تجاوز hooks الـ pre-commit والـ commit-msg. استخدمه بحذر، فهذه الـ hooks تفرض غالبًا جودة الشيفرة.

غير موصى بهيتخطّى فحوص pre-commit وcommit-msg — أصلح ما يشير إليه الـ hook بدلًا من ذلك

مثال

git commit -n -m "Quick fix (skip hooks)"

اسمح بإنشاء commit دون تغييرات. مفيد لتشغيل خطوط CI/CD أو تعليم المحطات.

عند الحاجةcommits بلا تغييرات، مثلًا لتشغيل CI

مثال

git commit --allow-empty -m "Trigger rebuild"

اسمح بإنشاء commit برسالة فارغة. غير مستحسن عمومًا لأنه يجعل التاريخ أصعب فهمًا.

غير موصى بهالرسائل الفارغة تجعل التاريخ غير مقروء

مثال

git commit --allow-empty-message -m ""

حدد كيف تُنظَّف رسالة الـ commit قبل الحفظ. الأوضاع: strip، whitespace، verbatim، scissors، default (strip إن فُتح المحرر، وإلا whitespace).

عند الحاجةيتحكم في كيفية إزالة أسطر # والمسافات من الرسالة

مثال

git commit --cleanup=verbatim -m "Keep message exactly as-is"

وقّع الـ commit بـ GPG. يثبت أن الـ commit منك ولم يُعبث به. يتطلب إعداد GPG.

عند الحاجةوقّع عندما يتحقق مشروعك أو منصة الاستضافة من التواقيع

مثال

git commit -S -m "Signed commit"

لا توقّع الـ commit بـ GPG. يتجاوز إعداد commit.gpgSign إن كان true.

عند الحاجةيتجاوز commit.gpgSign لـ commit واحد

مثال

git commit --no-gpg-sign -m "Unsigned commit"

أنشئ commit من نوع fixup لاستخدامه مع git rebase --autosquash. سيُدمج الـ commit تلقائيًا في الـ commit المحدد أثناء rebase.

موصى بهطريقة نظيفة لإصلاح commit أقدم مع rebase --autosquash

مثال

git commit --fixup=abc1234

أنشئ commit من نوع squash لاستخدامه مع git rebase --autosquash. مثل ‎--fixup لكنه يحتفظ بالرسالتين لدمجهما أثناء rebase.

عند الحاجةمثل ‎--fixup لكنه يتيح جمع الرسائل

مثال

git commit --squash=abc1234

أضف سطرًا ختاميًا (مفتاح: قيمة) إلى رسالة الـ commit. من الأسطر الشائعة Reviewed-by وCo-authored-by وFixes وغيرها.

عند الحاجةبيانات منظّمة مثل Co-authored-by أو Reviewed-by

مثال

git commit --trailer "Reviewed-by: Jane <jane@example.com>" -m "Fix bug"

خبير (8)

عند dry-run، اعرض المخرجات بالتنسيق المختصر. يعرض حالة الملفات بشكل مضغوط مثل git status -s. يتضمن ‎--dry-run.

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

مثال

git commit --dry-run --short

عند dry-run، اعرض المخرجات بالتنسيق الطويل (الافتراضي). يعرض معلومات حالة مفصّلة للملفات.

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

مثال

git commit --dry-run --long

عند dry-run، اعرض المخرجات بتنسيق porcelain. مخرجات ثابتة ملائمة للسكربتات لا تتغيّر بين إصدارات Git.

عند الحاجةمخرجات تجربة جافة قابلة للقراءة آليًا للسكربتات

مثال

git commit --dry-run --porcelain

اعرض الفرع ومعلومات التتبّع حتى في التنسيق المختصر أثناء dry-run.

عند الحاجةيضيف معلومات الفرع إلى المخرجات المختصرة/porcelain للتجربة الجافة

مثال

git commit --dry-run --short --branch

عند عرض مخرجات الحالة بتنسيق short أو porcelain، أنهِ المدخلات بـ NUL بدل سطر جديد. مفيد لتحليل أسماء ملفات فيها محارف خاصة.

عند الحاجةمخرجات تجربة جافة منتهية بـ NUL للسكربتات

مثال

git commit --dry-run --porcelain -z

لا تضمّن مخرجات git status في قالب رسالة الـ commit عند استخدام المحرر.

عند الحاجةيخفي قائمة الحالة في قالب المحرر

مثال

git commit --no-status

تجاوز hook الـ post-rewrite، الذي لا يشغّله git commit إلا عند الـ amend ‏(‎--amend).

عند الحاجةيتخطّى hook الـ post-rewrite عند ‎--amend؛ نادرًا ما تحتاجه

مثال

git commit --amend --no-post-rewrite

اقرأ الـ pathspec من ملف (واحد في كل سطر) بدل سطر الأوامر. استخدم '-' للقراءة من الإدخال القياسي.

عند الحاجةللسكربتات التي تسجّل مسارات كثيرة

مثال

git commit --pathspec-from-file=files.txt -m "Commit listed files"

اختيار الخيار المناسب

خيارات الرسالة

طرق مختلفة لتقديم رسالة الـ commit أو تعديلها

الأمرالمصدريفتح المحررحالة الاستخدام
git commit -m "msg"في السطر✗commits سريعة برسائل قصيرة
git commit -F fileملف✗رسالة مكتوبة مسبقًا في ملف
git commit -t fileقالب✓البدء بقالب في المحرر
git commit -eالمحرر✓إجبار المحرر حتى مع -m
git commit -C <commit>نسخ✗إعادة استخدام رسالة commit آخر
git commit -c <commit>نسخ + تعديل✓تعديل رسالة commit آخر

تنظيف الرسالة

كيف تُعالَج رسالة الـ commit قبل حفظها

الأمرالوضعيزيل التعليقاتيزيل المسافاتالأنسب لـ
--cleanup=stripstrip✓✓معظم الـ commits
--cleanup=whitespaceالمسافات✗✓إبقاء تعليقات #
--cleanup=verbatimحرفيًا✗✗الحفاظ على الرسالة كما هي تمامًا
--cleanup=scissorsالمقصتحت سطر المقص فقط✓إبقاء أسطر # عند استخدام المحرر

المؤلف والتاريخ

تغيير من نفّذ الـ commit ومتى

الأمريتجاوزالتنسيقالاستخدام المعتاد
--author="Name <email>"المؤلفالاسم <email>تنفيذ commit نيابةً عن شخص آخر
--date="date"تاريخ التأليفISO 8601 / نسبيتأريخ commits بتاريخ سابق
--reset-authorكلاهماالمستخدم/الوقت الحاليانتبنّي patch مطبّق

الـ amend وإصلاح التاريخ

خيارات لتعديل commits موجودة

الأمرينشئيعدّل HEADيُستخدم مع
git commit --amendاستبدال✓إصلاح رسالة آخر commit أو محتواه
git commit --fixup=<sha>commit من نوع fixup!✗git rebase -i --autosquash
git commit --squash=<sha>commit من نوع squash!✗git rebase -i --autosquash

ما الذي يدخل الـ commit

التحكم في الملفات المضمَّنة في الـ commit

الأمريجهّز أولًاالـ commitsمجلد العمل
git commit✗المجهَّز فقطدون تغيير
git commit -aالملفات المتتبَّعةكل المتتبَّعةدون تغيير
git commit -i <file>المحددةالمجهَّز + الملفدون تغيير
git commit -o <file>المحددة فقطالملف فقطتُستبعد المجهّزات الأخرى
git commit -pتفاعليأجزاء مختارةدون تغيير

توقيع GPG

توقيع الـ commits تشفيريًا للتحقق منها

الأمرالإجراءالمفتاح المستخدممتى تستخدمه
git commit -Sالتوقيعمفتاح GPG الافتراضيإثبات أصالة الـ commit
git commit -S<keyid>التوقيعمفتاح محدداستخدام مفتاح توقيع بديل
git commit --no-gpg-signدون توقيعلا شيءتجاوز commit.gpgSign=true

التحكم في الـ hooks

تجاوز hooks الـ pre-commit والـ post-commit أو التحكم فيها

الأمريتخطّىمستوى الخطرمتى تستخدمه
git commit --no-verifypre-commit + commit-msgمتوسطإصلاح طارئ، وإصلاح الـ hooks لاحقًا
git commit --no-post-rewritepost-rewriteمنخفضتخطّي المعالجة البطيئة بعد الـ amend

Dry-run وتنسيق المخرجات

معاينة ما سيُحفظ دون تنفيذ الـ commit فعلًا

الأمرالتنسيققابل للتحليليعرض
--dry-runطويل (افتراضي)✗حالة كاملة مع تلميحات
--dry-run --shortمختصر✓رموز حالة مختصرة
--dry-run --porcelainPorcelain✓تنسيق ثابت للسكربتات
--dry-run --branchمع الفرع✓يضيف معلومات التتبّع إلى التنسيق المختصر
--dry-run -zمفصولة بـ NUL✓آمن لأسماء الملفات الخاصة

عرض الحالة في المحرر

التحكم فيما يظهر في المحرر عند كتابة رسالة الـ commit

الأمرفي المحررالأثر
git commit --statusالحالة كتعليقاترؤية الملفات التي ستُحفظ (افتراضي)
git commit --no-statusدون قائمة ملفاتمحرر أنظف، تشتيت أقل
git commit -vالـ diff الكاملمراجعة التغييرات بدقة أثناء الكتابة
git commit -qمحرر عاديإخفاء الملخّص بعد الـ commit

commits خاصة

إنشاء commits في حالات غير معتادة

الأمريسمحينشئ commitحالة الاستخدام
--allow-emptyلا تغييرات✓مشغّلات CI، علامات الفروع
--allow-empty-messageدون رسالة✓سكربتات آلية (غير مستحسن)
--trailer "Key: value"البيانات الوصفية✓Co-authored-by، Fixes، Reviewed-by

أمثلة على سير العمل

1
git add .

جهّز تغييراتك

2
git commit -m "Fix typo in README"

نفّذ commit برسالة قصيرة

1
git add -A

جهّز كل التغييرات

2
git commit

يفتح المحرر لرسالة متعددة الأسطر

3
(Write: subject line, blank line, detailed body)

اتبع قاعدة 50/72 في التنسيق

1
git add forgotten-file.js

جهّز الملف المنسي

2
git commit --amend --no-edit

أضفه إلى آخر commit دون تغيير الرسالة

1
git commit --amend -m "Corrected message"

استبدل آخر commit برسالة جديدة

1
git commit -a -m "Update config files"

جهّز تلقائيًا الملفات المتتبَّعة المعدّلة/المحذوفة ونفّذ commit

1
git add .

جهّز التغييرات

2
git commit -S -m "Verified security patch"

أنشئ commit موقّعًا بـ GPG

مفاتيح المحرر والوضع التفاعلي

اختصارات لوحة المفاتيح عندما يفتح Git محررًا لرسالة الـ commit، أو عند استخدام الأوضاع التفاعلية.

Vim (الافتراضي في أنظمة كثيرة)

core.editor = vim
iالدخول في وضع الإدراج (ابدأ الكتابة)
Escالخروج من وضع الإدراج
:wqالحفظ والخروج (يُكمل الـ commit)
:q!الخروج دون حفظ (يُلغي الـ commit)
ddحذف السطر الحالي
uالتراجع عن آخر تغيير

Nano

core.editor = nano
Ctrl+Oحفظ الملف (write out)
Ctrl+Xالخروج (يسأل عن الحفظ إن وُجدت تغييرات)
Ctrl+Kقص السطر الحالي
Ctrl+Uلصق النص المقصوص
Ctrl+Wالبحث في الملف

VS Code

core.editor = "code --wait"
Ctrl+Sحفظ الملف
Ctrl+Wإغلاق التبويب (يُكمل الـ commit)
Ctrl+Zتراجع
Close without savingإلغاء الـ commit

وضع patch ‏(-p)

git commit -p
yجهّز هذا الجزء
nلا تجهّز هذا الجزء
qخروج؛ لا تجهّز الأجزاء المتبقية
aجهّز هذا الجزء وكل الأجزاء المتبقية
dلا تجهّز هذا الجزء ولا الأجزاء المتبقية
sقسّم الجزء إلى أجزاء أصغر
eعدّل الجزء يدويًا
?اعرض المساعدة

حل المشكلات

no changes added to commit (use "git add" and/or "git commit -a")

السبب: تغيّرت ملفات لكن لا شيء مجهَّز - نسيت تشغيل 'git add'. (إن رأيت 'nothing to commit, working tree clean' فلا توجد تغييرات إطلاقًا.)

جهّز التغييرات بـ 'git add' قبل الـ commit. استخدم 'git status' لترى ما يحتاج إلى تجهيز.

git add . && git commit -m "message"

Please tell me who you are (Author identity unknown)

السبب: يتطلب Git ضبط user.name وuser.email قبل أول commit لك.

اضبط هويتك على مستوى النظام أو لهذا المستودع.

git config --global user.name "Your Name" && git config --global user.email "you@example.com"

Aborting commit due to empty commit message

السبب: أغلقت المحرر دون كتابة رسالة، أو لم تحتوِ الرسالة إلا تعليقات.

اكتب رسالة commit في المحرر، أو استخدم الخيار '-m' لرسالة في السطر.

git commit -m "Your message here"

فشل hook الـ pre-commit

السبب: وجد hook الـ pre-commit (فحص الشيفرة، الاختبارات، التنسيق) مشكلات ومنع الـ commit.

أصلح المشكلات التي أبلغ عنها الـ hook. ولا تتجاوزه بـ '--no-verify' إلا عند الضرورة القصوى.

git commit --no-verify -m "message"

فشل hook الـ commit-msg

السبب: رسالة الـ commit لا تطابق التنسيق الذي تفرضه أعراف المشروع.

اتبع عُرف رسائل الـ commit في مشروعك (مثل تنسيق Conventional Commits).

git commit -m "feat: add new feature"

Changes not staged for commit

السبب: عدّلت ملفات لكنك لم تضفها إلى منطقة التجهيز.

استخدم 'git add' لتجهيز ملفات محددة، أو 'git commit -a' لتجهيز الملفات المتتبَّعة تلقائيًا.

git add <file> && git commit -m "message"

error: failed to push some refs (بعد amend)

السبب: نفّذت amend على commit مدفوع أصلًا، فنشأ تاريخ متباعد.

إما أن تدفع بالإجبار (إن كنت وحدك على الفرع) أو تنفّذ revert وتنشئ commit جديدًا.

git push --force-with-lease

Your branch is ahead of 'origin/main' by X commits

السبب: لديك commits محلية لم تُدفع بعد.

هذا طبيعي! ادفع حين تكون جاهزًا، أو تابع العمل محليًا.

git push origin main

نصائح وأخطاء شائعة

أفضل الممارسات

  • ✓اكتب رسائل commit واضحة: ابدأ بفعل (Add، Fix، Update، Remove) وأبقِ العنوان أقل من 50 محرفًا.
  • ✓استخدم صيغة الأمر: اكتب 'Add feature' لا 'Added feature' - تخيّل أنك تكمل عبارة «This commit will...»
  • ✓اجعل الـ commits ذرّية: يجب أن يمثّل كل commit تغييرًا منطقيًا واحدًا. لا تخلط إصلاح الأخطاء بالميزات الجديدة.
  • ✓راجع قبل الـ commit: استخدم 'git diff --staged' لترى بالضبط ما ستحفظه.
  • ✓لا تنفّذ amend أبدًا على commits مدفوعة: الـ amend يعيد كتابة التاريخ. عدّل فقط الـ commits التي لم تُشارك.
  • ✓افصل العنوان عن المتن بسطر فارغ: في الرسائل الطويلة، السطر الأول هو العنوان، ثم سطر فارغ، ثم التفاصيل.
  • ✓لفّ نص المتن عند 72 محرفًا: يضمن هذا سهولة القراءة في الطرفيات وفي مخرجات git log.
  • ✓أشر إلى أرقام التذاكر: ضمّن 'Fixes #123' أو 'Closes #456' لربط الـ commits بمتتبّع التذاكر.
  • ✓نفّذ commit كثيرًا وpush أقل: الـ commits الصغيرة المتكررة أسهل في المراجعة والتراجع من الكبيرة.
  • ✓لا تحفظ الملفات المولَّدة: أبقِ مخرجات البناء والاعتماديات (node_modules) والملفات المُترجَمة خارج الـ commits.

أخطاء متكررة

  • ✗تشغيل 'git commit' دون تجهيز التغييرات أولًا: يجب استخدام 'git add' أولًا، إلا مع 'git commit -a' الذي يجهّز الملفات المتتبَّعة فقط.
  • ✗كتابة رسائل مبهمة مثل 'fix' أو 'update': استخدم رسائل واضحة ووصفية تشرح سبب التغيير.
  • ✗حفظ تغييرات كثيرة لا علاقة بينها دفعة واحدة: اجعل الـ commits ذرّية - تغيير منطقي واحد لكل commit لتسهيل المراجعة والتراجع.
  • ✗استخدام ‎--amend على commits مدفوعة أصلًا إلى فروع مشتركة: الـ amend يعيد كتابة التاريخ ويسبب مشكلات للآخرين.
  • ✗نسيان ضبط user.name وuser.email: يتطلب Git هوية المؤلف قبل أول commit لك.

الأسئلة الشائعة

A:

'git commit' يحفظ فقط ما في منطقة التجهيز. أما 'git commit -a' فيجهّز تلقائيًا كل الملفات المتتبَّعة المعدّلة والمحذوفة قبل الحفظ - لكن ليس الملفات الجديدة غير المتتبَّعة. ما زلت تحتاج إلى 'git add' للملفات الجديدة.

A:

للـ commits غير المدفوعة: 'git reset --soft HEAD~1' يُبقي التغييرات مجهّزة، و'git reset HEAD~1' (مثل ‎--mixed) يلغي تجهيزها، و'git reset --hard HEAD~1' يتخلّص منها. للـ commits المدفوعة: استخدم 'git revert HEAD' لإنشاء commit جديد يلغي التغييرات.

A:

لآخر commit: 'git commit --amend -m "New message"'. للـ commits الأقدم: استخدم 'git rebase -i' وغيّر 'pick' إلى 'reword'. لا تفعل ذلك أبدًا مع commits مدفوعة إلى فروع مشتركة.

A:

يفتح Git محررك المضبوط لكتابة رسالة. إن أغلقته دون حفظ رسالة، يُلغى الـ commit. استخدم '-m' لرسالة في السطر أو '--allow-empty-message' للحفظ دون رسالة (غير مستحسن).

A:

جهّز الملفات الإضافية بـ 'git add <file>'، ثم شغّل 'git commit --amend --no-edit'. يضيفها هذا إلى الـ commit السابق دون تغيير رسالته.

A:

'--amend' يستبدل آخر commit بالكامل (hash جديد!). استخدمه لتصحيح أخطاء الرسائل أو إضافة ملفات منسية. لا تستخدمه أبدًا على commits مدفوعة إلى فروع مشتركة - فهو يعيد كتابة التاريخ.

A:

استخدم عدة خيارات -m: 'git commit -m "Subject" -m "Body paragraph"'. كل -m ينشئ فقرة جديدة. أو شغّل 'git commit' فقط لفتح محررك.

A:

أبقِ سطر العنوان أقل من 50 محرفًا (الحد الأقصى 72). ولفّ المتن عند 72 محرفًا. يضمن هذا سهولة القراءة في الطرفية وgit log وواجهات GitHub/GitLab.

A:

استخدم 'git commit --no-verify' أو '-n'. يتجاوز هذا hooks الـ pre-commit والـ commit-msg. استخدمه باعتدال - الـ hooks موجودة للحفاظ على جودة الشيفرة.

A:

نعم، استخدم 'git commit --allow-empty -m "message"'. مفيد لتشغيل خطوط CI/CD أو تعليم محطات في التاريخ دون تغيير الشيفرة.