Git: دليل تفصيلي لعمليات التسجيل في Git وإرشادات كتابة…

يُعد «الالتزام» (commit) عملية أساسية في Git؛ حيث يُنشئ كل «التزام» لقطة فريدة للإصدار تسجل الحالة الكاملة للمشروع في لحظة زمنية معينة.

1. عرض المفاهيم الأساسية

(1) ما المقصود بـ«الالتزام»؟

يُعد «الالتزام» (commit) الوحدة الأساسية لنظام التحكم في الإصدارات Git، ويحتوي على المعلومات التالية:

100%
graph TB
    A[Workspace<br/>Working Directory] -->|git add| B[Buffer<br/>Staging Area]
    B -->|git commit| C[Repository<br/>Repository]
    C --> D[Generate a commit object<br/>Commit Object]
    D --> E[SHA-1Hash<br/>a1b2c3d4e5f6...]
    
    style A fill:#fff3cd
    style B fill:#d4edda
    style C fill:#c3e6cb
    style E fill:#cce5ff

(2) عملية التقديم

تتألف عملية التقديم الكاملة من ثلاث خطوات:

  1. تعديل الملف: تعديل ملف في مساحة العمل
  2. تغييرات المرحلة: استخدم git add لإضافة التغييرات إلى منطقة التجهيز
  3. إنشاء عملية إرسال: استخدم git commit لإرسال محتويات منطقة التجهيز إلى المستودع

(3) الغرض من التقديم



2. العمليات الأساسية لتقديم الطلبات

(1) التقديم الأول

▶ مثال: إنشاء أول «كوميت» لك

BASH
# Initialize the repository
git init

# Create a File
echo "# My Project" > README.md

# View Status
git status
# Untracked files:
#   README.md

# Add to Stash
git add README.md

# Submit
git commit -m "Initial commit"

# Output:
# [main (root-commit) a1b2c3d] Initial commit
#  1 file changed, 1 insertion(+)
#  create mode 100644 README.md

(2) المشاركات المنتظمة

▶ مثال: عملية التقديم القياسية

BASH
# Edit File
echo "## Features" >> README.md

# View and Edit
git diff
# +## Features

# Add to Stash
git add README.md

# View Staging Status
git status
# Changes to be committed:
#   modified:   README.md

# Submit
git commit -m "Add features section"

# View commit history
git log --oneline
# a1b2c3d Add features section
# b2c3d4e Initial commit

(3) الإرسال الجماعي

▶ مثال: الإضافة الجماعية والإرسال

BASH
# Create Multiple Files
touch file1.js file2.js file3.js

# Add All Files
git add .

# Or add specific types of files
git add *.js

# Submit
git commit -m "Add multiple JavaScript files"

# View Submission
git show
# commit a1b2c3d4e5f6...
# Author: Zhang San <zhangsan@example.com>
# Date:   Mon Jan 1 10:00:00 2026 +0800
#
#     Add multiple JavaScript files
#
# diff --git a/file1.js b/file1.js
# new file mode 100644
# index 0000000..e69de29


3. إرشادات التقديم

(1) أهمية تقديم المعلومات

يمكن لرسائل الالتزام الجيدة أن:

(2) معيار الالتزامات التقليدية

تُعد هذه حالياً القاعدة الأكثر شيوعاً لكتابة رسائل الالتزام، ويكون تنسيقها على النحو التالي:

TEXT 📖 للعرض فقط
<type>(<scope>): <subject>

<body>

<footer>

شرح كل قسم:

(3) نوع الطلب

النوع الوصف حالة الاستخدام
ميزة ميزة جديدة إضافة ميزة جديدة
تصحيح إصلاح الخلل إصلاح خطأ في البرنامج
المستندات تعديلات المستندات تحديث محتوى المستند
النمط تنسيق الكود تغييرات في التنسيق لا تؤثر على معنى الكود
إعادة هيكلة إعادة الهيكلة إعادة هيكلة الكود التي لا تضيف ميزات ولا تُصلح الأخطاء
perf تحسين الأداء تحسين أداء الكود
اختبار اختبار إضافة أو تعديل كود الاختبار
المهمة عملية البناء/الأدوات التغييرات التي طرأت على عملية البناء أو الأدوات الداعمة
ci إعدادات CI تعديل ملف إعدادات CI
التراجع التراجع التثبيت الذي سبق التراجع

▶ مثال: معلومات الإرسال القياسية

BASH
# Single-line commit - New Features
git commit -m "feat: Add User Login Functionality"

# Single-line commit - BugFix
git commit -m "fix: Fix the login authentication error"

# Range-Based Submissions
git commit -m "feat(auth): AddJWTCertification Support"

# Multi-line commit
git commit -m "feat(user): Add a user registration feature" -m "Supports registration via email and phone number" -m "Add Form Validation and Error Messages"

# Submission with Footer(CloseIssue)
git commit -m "fix: Fixed a styling issue on the login page" -m "Closes #123"

# Use the editor to write a detailed commit message
git commit
# It will open in the editor,You can write a detailed commit message

(4) أفضل الممارسات لتقديم المعلومات

رسائل الالتزام الجيدة:

TEXT 📖 للعرض فقط
feat(auth): AddOAuth2.0Login Support

- SupportGoogle、GitHub、WeChat Third-Party Login
- Add Login State Persistence
- Enable Auto-RefreshTokenMechanism

Closes #456

رسائل الالتزام غير الملائمة:

TEXT 📖 للعرض فقط
update
fix bug
I made some changes.
WIP


4. شرح مفصل لخيارات الإرسال

(1) خيارات الالتزام الشائعة

الخيار الوصف مثال
-m إرسال المعلومات git commit -m "message"
-a وضع الملفات التي تم تتبعها في مرحلة التجهيز تلقائيًا git commit -a -m "message"
--amend تعديل آخر عملية إرسال git commit --amend
--no-verify تخطي ربط الالتزام git commit --no-verify -m "message"
--allow-empty السماح بتقديم طلبات فارغة git commit --allow-empty -m "message"
-s إضافة «Signed-off-by» git commit -s -m "message"

▶ مثال: استخدام خيارات الإرسال

BASH
# Auto-check-in and commit(Applies only to tracked files)
echo "new content" >> README.md
git commit -a -m "Update README"

# Add a signature
git commit -s -m "feat: Add a New Feature"
# Will be added to the submitted information:
# Signed-off-by: Zhang San <zhangsan@example.com>

# Skippre-commitHook
git commit --no-verify -m "WIP: Save as Draft"

# View Submission Details
git show HEAD

(2) إرسال القالب

يمكنك تهيئة قوالب عمليات الإرسال لضمان التزام أعضاء الفريق بتنسيق موحد لرسائل عمليات الإرسال.

BASH
# Create a commit template
cat > .git/commit-template << 'EOF'
# <type>(<scope>): <subject>
#
# typeAvailable values:
# feat, fix, docs, style, refactor, perf, test, chore
#
# subjectRules:
# - Using Imperative Sentences
# - Lowercase the first letter
# - Do not add a period at the end
EOF

# Configuring the Use of Templates
git config commit.template .git/commit-template

# Submit Using a Template
git commit
# It will open the editor,Display template content


5. التعديل والإرسال

(1) تعديل آخر عملية تسجيل

▶ مثال: تعديل رسالة الالتزام

BASH
# Edit the commit message for the last commit
git commit --amend -m "feat: Add User Login Functionality(After the correction)"

# Output:
# [main d4e5f6g] feat: Add User Login Functionality(After the correction)
#  Date: Mon Jan 1 10:00:00 2026 +0800
#  1 file changed, 1 insertion(+)

(2) Add files to the last commit

▶ Example: Adding Missing Files

BASH
# Suppose you realize after submitting that you've left out a file
git add forgotten-file.txt

# Add to the last commit,Do not modify the commit message
git commit --amend --no-edit

# Or add to and modify the commit message
git commit --amend -m "feat: Add user login functionality and related configurations"

(3) تعديل معلومات المؤلف في المقالة المقدمة

▶ مثال: تعديل معلومات المؤلف

BASH
# Change the author of the last commit
git commit --amend --author="Li Si <lisi@example.com>"

# Edit Submission Date
git commit --amend --date="2026-01-01 10:00:00"

(4) ملاحظات مهمة بشأن تعديل المشاركات

100%
graph TB
    A[Commit Changes] --> B{Has the commit been pushed??}
    B -->|Not pushed| C[Can be safely modified]
    B -->|Pushed| D[Forced push required]
    D --> E[May affect other developers]
    E --> F[Use with caution]
    
    style C fill:#d4edda
    style F fill:#f8d7da

⚠️ تحذير هام:



6. تقديم أفضل الممارسات

(1) الالتزام الذري

يجب ألا يحتوي كل «كوميت» إلا على تغيير منطقي واحد فقط:

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

BASH
# Submit1:Add Feature
git add feature.js
git commit -m "feat: Add User Login Functionality"

# Submit2:FixBug
git add fix.js
git commit -m "fix: Fix the login authentication error"

# Submit3:Update Documentation
git add README.md
git commit -m "docs: Update the Login Feature Documentation"

ما يجب تجنبه:

BASH
# A single commit containing multiple unrelated changes
git add .
git commit -m "Add Feature、FixBug、Update Documentation"

(2) تواتر الإرسال

(3) الفحص قبل التقديم

▶ مثال: قائمة مراجعة قبل التقديم

BASH
# 1. View the content to be submitted
git status

# 2. View Specific Changes
git diff

# 3. View the contents of the staging area
git diff --staged

# 4. Submit after verifying that everything is correct
git commit -m "feat: Add a New Feature"

# 5. View Submission Results
git show

(4) تجاهل إعدادات الملف

استخدم الملف .gitignore لاستبعاد الملفات التي لا يلزم إرسالها:

BASH
# .gitignoreExample

# Dependency Directory
node_modules/
vendor/

# Compilation Output
dist/
build/
*.o
*.class

# IDELayout
.vscode/
.idea/
*.swp

# Environment Configuration
.env
.env.local

# Log Files
*.log
logs/

# Operating System Files
.DS_Store
Thumbs.db


❓ أسئلة شائعة

س ماذا عليّ أن أفعل إذا أدركت أنني نسيت إرفاق ملف ما بعد إرسال الطلب؟
ج استخدم git add لإضافة الملفات المفقودة، ثم قم بتشغيل git commit --amend --no-edit لإلحاقها بآخر عملية إرسال. ملاحظة: لا يمكنك تعديل سوى عمليات الإرسال التي لم يتم إرسالها بعد.
س كيف يمكنني التراجع عن آخر عملية إرسال قمت بها؟
ج استخدم git reset --soft HEAD~1 للتراجع عن عملية التسجيل مع الاحتفاظ بالتغييرات في منطقة التجهيز؛ واستخدم git reset --mixed HEAD~1 للتراجع عن عملية التسجيل وإعادة التغييرات إلى دليل العمل؛ واستخدم git reset --hard HEAD~1 لإلغاء التغييرات تمامًا.
س بأي لغة يجب تقديم المعلومات؟
ج نوصي باستخدام اللغة الإنجليزية، نظرًا لأن Git ومعظم المشاريع مفتوحة المصدر تستخدم اللغة الإنجليزية. أما بالنسبة لمشاريع الفريق الداخلية، فيمكنك أيضًا استخدام اللغة الصينية، ولكن احرص على الحفاظ على الاتساق.
س كيف يمكنني الاطلاع على تفاصيل عملية التزام معينة؟
ج استخدم git show <commit-id> لعرض تفاصيل عملية إرسال معينة، بما في ذلك البيانات الوصفية لعملية الإرسال والاختلافات بين الملفات. استخدم git show دون أي معلمات لعرض أحدث عملية إرسال.
س لماذا تظهر رسالة «لا يوجد ما يمكن تسجيله» عندما أحاول التسجيل؟
ج هذا يعني أن منطقة التجهيز فارغة. عليك أولاً استخدام git add لتجهيز التغييرات، أو استخدام git commit -a لتجهيز التغييرات تلقائيًّا في الملفات التي يتم تتبعها.

📖 ملخص


📝 تمارين

  1. تمرين أساسي: أنشئ مستودع Git، وأضف ملف README.md، وقم بأول عملية تسجيل مع كتابة رسالة تسجيل مناسبة، ثم اطلع على سجل عمليات التسجيل.

  2. مشكلة متقدمة: قم بمحاكاة سيناريو تكتشف فيه وجود ملف مفقود بعد الإرسال. استخدم الخيار --amend لإلحاق الملف بآخر عملية إرسال قمت بها، وتحقق من محتويات عملية الإرسال.

  3. التحدي: قم بتكوين قالب للالتزام، وأنشئ ملف قالب يتوافق مع إرشادات «Conventional Commits»، واستخدم هذا القالب لإجراء التزام، مع التأكد من أن رسالة الالتزام تتبع التنسيق المحدد.

Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%