مفهوم الوسوم الوصفية في Git
عند العمل على مشروع برمجي باستخدام نظام التحكم بالإصدارات Git، يقوم المطورون بإجراء تعديلات مستمرة على الملفات، و يتم حفظ هذه التعديلات على شكل نسخ ( Commits ) في المستودع الخاص بالمشروع. مع مرور الوقت و خصوصاً في المشاريع الكبيرة، قد يحتوي المستودع على مئات أو آلاف النسخ، كل واحد منها تمثل نقطة زمنية مختلفة من تطور المشروع.
هذا الأمر يخلق تحدياً عملياً و هو كيف يمكننا تحديد اللحظات المهمة في هذا المستودع المليئ بالنسخ مثل:
- إصدار النسخة الأولى من البرنامج.
- نسخة مستقرة جاهزة للاستخدام.
- نسخة تجريبية تحتوي على ميزة جديدة.
- نقطة نريد الرجوع إليها لاحقاً عند حدوث مشكلة.
الرجوع لنسخة محددة من المشروع بالاعتماد على الهاش كود ( Hash Code ) الخاص بالنسخة فقط هو أمر صعب جداً لأن هذه الأرقام تكون طويلة و ليس من السهل تذكرها أو حفظها. هنا تظهر الوسوم ( Tags ) لتحل هذه المشكلة.
تطبيق عملي و شامل لكل ما تعلمته
سنفترض أنه لديك مشروع يتكون من مجلّد إسمه demo و بداخله 3 ملفات إسمهم file1.txt و file2.txt و file3.txt.
الآن، إفتح موجّه الأوامر و توجه إلى المجلد demo لتبدأ التجربة عليه.
1- فيما يلي قمنا باستخدام الأمر git init لإنشاء مستودع .git بداخل مجلد المشروع demo.
2- فيما يلي قمنا باستخدام الأمر git add لتجهيز جميع الملفات ليتم إضافتها في النسخة القادمة التي يتم إنشاؤها من المشروع demo.
3- فيما يلي قمنا باستخدام الأمر git commit لحفظ نسخة من المشروع.
Terminal
> git commit -m "Basic setup"
[master (root-commit) c5c7b4e] Basic setup
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file1.txt
create mode 100644 file2.txt
create mode 100644 file3.txt
c5c7b4e هي أول 7 أحرف من قيمة الهاش كود الخاص بالنسخة التي قمنا بإنشاءها قبل قليل.
في حال قمت باستخدام الأمر git log فإنه سيتم عرض قيمة الهاش كود الخاص بالنسخة بشكل كامل.
4- فيما يلي قمنا باستخدام الأمر git tag لإضافة وسم للنسخة السابقة التي تم إنشاؤها.
Terminal
> git tag v1.0.0
5- فيما يلي قمنا باستخدام الأمر git tag لعرض جميع الوسوم الخاصة بالمشروع.
Terminal
> git tag
v1.0.0
نلاحظ أنه ظهر وسم واحد فقط لأننا لم نقم بإنشاء سواه حتى اللحظة.
6- فيما يلي قمنا باستخدام الأمر git show لعرض معلومات تفصيلية حول النسخة المرتبطة بالوسم v1.0.0.
Terminal
> git show v1.0.0
commit c5c7b4eaf329d2fe3d327aed612f55246476afa2 (HEAD -> master, tag: v1.0.0)
Author: mhamad <mhamad.harmush@gmail.com>
Date: Thu Feb 12 13:16:25 2026 +0200
Basic setup
diff --git a/file1.txt b/file1.txt
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/file1.txt
@@ -0,0 +1 @@
+test
diff --git a/file2.txt b/file2.txt
new file mode 100644
index 0000000..e69de29
diff --git a/file3.txt b/file3.txt
new file mode 100644
index 0000000..e69de29
عند كتابة الأمر git show يصبح بإمكانك استخدام الأسهم ▼ ▲ لعرض معلومات تفصيلية حول التغييرات التي طرأت على الملفات الموجودة في النسخة - حتى تظهر لك كما ظهرت لنا - و حين تريد الخروج من الأمر سيكون عليك النقر فقط على الحرف q.
7- فيما يلي قمنا باستخدام الأمر git tag لحذف الوسم v1.0.0.
Terminal
> git tag -d v1.0.0
Deleted tag 'v1.0.0' (was c5c7b4e)
8- فيما يلي قمنا باستخدام الأمر git tag لإنشاء الوسم v1.0.0 من جديد مع إرفاق رسالة توضيحية معه.
Terminal
> git tag -a v1.0.0 -m "Version 1.0.1 release"
9- فيما يلي قمنا باستخدام الأمر git show لعرض معلومات تفصيلية حول النسخة المرتبطة بالوسم v1.0.0.
Terminal
> git show v1.0.0
tag v1.0.0
Tagger: mhamad <mhamad.harmush@gmail.com>
Date: Thu Feb 12 15:15:24 2026 +0200
Version 1.0.1 release
commit c5c7b4eaf329d2fe3d327aed612f55246476afa2 (HEAD -> master, tag: v1.0.0)
Author: mhamad <mhamad.harmush@gmail.com>
Date: Thu Feb 12 13:16:25 2026 +0200
Basic setup
diff --git a/file1.txt b/file1.txt
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/file1.txt
@@ -0,0 +1 @@
+test
diff --git a/file2.txt b/file2.txt
new file mode 100644
index 0000000..e69de29
diff --git a/file3.txt b/file3.txt
new file mode 100644
index 0000000..e69de29
هذه المرة نلاحظ أنه تم إظهار معلومات الوسم نفسه بشكل مفصل قبل إظهار معلومات النسخة الخاصة به.
10- فيما يلي قمنا بإضافة وسم آخر إسمه v1.0.1 لنفس النسخة بالإعتماد على الهاش كود الخاص بها.
Terminal
> git tag v1.0.1 c5c7b4eaf329d2fe3d327aed612f55246476afa2
11- فيما يلي قمنا بإضافة وسم آخر إسمه v1.0.2 لنفس النسخة بالإعتماد على الهاش كود الخاص بها مع إرفاق رسالة توضيحية أيضاً.
Terminal
> git tag v1.0.1 c5c7b4eaf329d2fe3d327aed612f55246476afa2 -m "Version 1.0.2"