كيف تقرأ الرسوم التوضيحية

كل رسم توضيحي يقوده محاكي Git يُتحقَّق من مخرجاته مقارنةً بـ Git الحقيقي. إليك معنى كل جزء من المشهد — ومشهد حيّ لتجرّبه.

مثال حيّ: git commit

اضغط ▶ وشاهد ملفًا ينتقل من القرص إلى منطقة التجهيز ثم إلى commit. لكتابة أوامرك الخاصة، افتح ساحة التجربة.

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZEمستودعك — ‎.git على حاسوبك2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهREADME.mdدون تغييرapp.jsدون تغييرindex.htmlدون تغييرv1v1v1v1v1v1v2v2v2HEAD → main → 2e039ac “Add homepage”
0.0s / 66s
commitالحلقة = الـ commit الذي يقف عليه HEADغير قابل للوصول (لا يزال موجودًا)الفرع = لافتة متحركةorigin/* = إشارتك المرجعية للمستودع البعيدHEAD = موقعك الحالي

1 ملفاتك — ملف واحد في ثلاثة أماكن

يتتبّع الجدول على اليسار كل ملف عبر الأماكن الثلاثة التي يحفظه فيها Git. تتغيّر لافتة الإصدار (v1، v2…) عندما يتغيّر المحتوى، وتومض الخلية عندما يلمسها أمر.

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZEمستودعك — ‎.git على حاسوبك2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهREADME.mdدون تغييرapp.jsمجهَّزindex.htmlمعدَّلlogin.jsغير متتبَّعv1v1v1v2v2v1v3v2v2v1——HEAD → main → 2e039ac “Add homepage”

مجلد العمل

الملف على قرصك — ما يعرضه محررك. التعديلات تصل إلى هنا أولًا.

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZEمستودعك — ‎.git على حاسوبك2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهREADME.mdدون تغييرapp.jsمجهَّزindex.htmlمعدَّلlogin.jsغير متتبَّعv1v1v1v2v2v1v3v2v2v1——HEAD → main → 2e039ac “Add homepage”

التجهيز

مسودة الـ commit التالي. ينسخ git add نسخة إلى هنا.

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZEمستودعك — ‎.git على حاسوبك2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهREADME.mdدون تغييرapp.jsمجهَّزindex.htmlمعدَّلlogin.jsغير متتبَّعv1v1v1v2v2v1v3v2v2v1——HEAD → main → 2e039ac “Add homepage”

HEAD

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

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZEمستودعك — ‎.git على حاسوبك2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهREADME.mdدون تغييرapp.jsمجهَّزindex.htmlمعدَّلlogin.jsغير متتبَّعv1v1v1v2v2v1v3v2v2v1——HEAD → main → 2e039ac “Add homepage”

سطر الحالة

تحت اسم كل ملف: unchanged أو modified أو staged أو untracked أو conflict… تمامًا كما يقول git status.

2 مخطط الـ commits

يرسم الجانب الأيمن مستودعك. كل ما فيه يأتي من الحالة الفعلية بعد كل أمر — لا شيء يوضع يدويًا.

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZEمستودعك — ‎.git على حاسوبك2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهREADME.mdدون تغييرapp.jsمجهَّزindex.htmlمعدَّلlogin.jsغير متتبَّعv1v1v1v2v2v1v3v2v2v1——HEAD → main → 2e039ac “Add homepage”

الدائرة

commit واحد، مع الـ hash المختصر والرسالة. الـ hashes حقيقية: تُحسب من المحتوى.

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZEمستودعك — ‎.git على حاسوبك16a965cMerge feature…16a965c6f96f4a7acb902f45bf46455f09ccff30 Merge feature/logina2b8b5dDocument inst…a2b8b5df5d4f38ac299e9b25e95ebcc998bfb7fa Document install2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit960123aCall login on…960123a1d58a1488381355be004d5a6ff601640c Call login on load19d2019Add login page19d2019870aaae1bc0c6d1a5aa8cc1f8d76c6473 Add login pagefeature/loginfeature/login: لافتة متحركة على commitmainmain: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهREADME.mdدون تغييرapp.jsدون تغييرindex.htmlدون تغييرlogin.jsدون تغييرv2v2v2v2v2v2v2v2v2v1v1v1HEAD → main → 16a965c “Merge feature/login”

الخط

يتجه من الأب إلى الابن. لـ commit الدمج أبوان، لذا يلتقي خطان.

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZEمستودعك — ‎.git على حاسوبكa2b8b5dDocument installa2b8b5df5d4f38ac299e9b25e95ebcc998bfb7fa Document install2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit960123aCall login on lo…960123a1d58a1488381355be004d5a6ff601640c Call login on load19d2019Add login page19d2019870aaae1bc0c6d1a5aa8cc1f8d76c6473 Add login pagemainmain: لافتة متحركة على commitfeature/loginfeature/login: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهREADME.mdدون تغييرapp.jsدون تغييرindex.htmlدون تغييرv2v2v2v1v1v1v2v2v2HEAD → main → a2b8b5d “Document install”

اللافتة

الفرع مجرد لافتة متحركة على commit (main، feature/login…).

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZEمستودعك — ‎.git على حاسوبكa2b8b5dDocument installa2b8b5df5d4f38ac299e9b25e95ebcc998bfb7fa Document install2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit960123aCall login on lo…960123a1d58a1488381355be004d5a6ff601640c Call login on load19d2019Add login page19d2019870aaae1bc0c6d1a5aa8cc1f8d76c6473 Add login pagemainmain: لافتة متحركة على commitfeature/loginfeature/login: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهREADME.mdدون تغييرapp.jsدون تغييرindex.htmlدون تغييرv2v2v2v1v1v1v2v2v2HEAD → main → a2b8b5d “Document install”

HEAD

موقعك. يقف بجانب الفرع الذي أنت عليه، أو مباشرة على commit عندما يكون HEAD منفصلًا.

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZE☁ ORIGIN — github.com/acme/shop (مستودع آخر)مستودعك — ‎.git على حاسوبك2b4c917Add to cart2b4c91785b581691dd1665ce1839576f03d6ac23 Add to cart2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitorigin/mainorigin/main: إشارتك المحلية إلى مكان فرع origin عند آخر fetch/push لكmainmain: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهmainmain: كما هو موجود على originREADME.mdدون تغييرapp.jsدون تغييرindex.htmlدون تغييرv1v1v1v2v2v2v2v2v2HEAD → main → 2b4c917 “Add to cart”

لافتة متقطّعة

origin/main وأمثاله: آخر نسخة تعرفها من فروع الخادم، تحدّثها أوامر fetch وpull وpush.

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZEمستودعك — ‎.git على حاسوبكb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepage (لا يمكن الوصول إليه — لا فرع يشير هنا؛ وما زال الـ reflog يتذكّره)mainmain: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهREADME.mdدون تغييرapp.jsدون تغييرindex.htmlدون تغييرv1v1v1v1v1v1v1v1v1HEAD → main → b272b3a “Set up project”

دائرة متقطّعة باهتة

commit غير قابل للوصول — لم يعد أي فرع يشير إليه، لكنه لا يزال موجودًا (يمكن للـ reflog إعادته).

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZE☁ ORIGIN — github.com/acme/shop (مستودع آخر)مستودعك — ‎.git على حاسوبك2b4c917Add to cart2b4c91785b581691dd1665ce1839576f03d6ac23 Add to cart2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitorigin/mainorigin/main: إشارتك المحلية إلى مكان فرع origin عند آخر fetch/push لكmainmain: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهmainmain: كما هو موجود على originREADME.mdدون تغييرapp.jsدون تغييرindex.htmlدون تغييرv1v1v1v2v2v2v2v2v2HEAD → main → 2b4c917 “Add to cart”

منطقة ORIGIN

تظهر عندما يستخدم الدرس مستودعًا بعيدًا: مستودع الخادم فوق مستودعك، لكي يُرى push وfetch وهما ينقلان الـ commits بينهما.

3 الطرفية

كل درس قائمة من أوامر Git. محاكي Git مدمج في الموقع يشغّلها في متصفحك — وقبل كل إصدار تُفحص مخرجاته سطرًا بسطر مقارنةً بـ Git 2.48 الحقيقي.

~/shop — bashgit add -p
$ git add -p app.js
diff --git a/app.js b/app.js index 4f29dbf..1cd9aa2 100644 --- a/app.js +++ b/app.js @@ -1,6 +1,6 @@ const cart = [] function add(item) { - cart.push(item) + if (item) cart.push(item) } function remove(item) { const i = cart.indexOf(item) (1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,p,?]?

الأسئلة

تتوقف الأوامر التفاعلية (add -p وrebase -i) عند كل سؤال لتقرأه قبل كتابة الإجابة.

~/shop — bashgit commit
$ git commit
✎ .git/COMMIT_EDITMSGsaved ✓ — git continues
Add cart feature
 
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch main
# Changes to be committed:
# modified: app.js
#
# Untracked files:
# login.js
#

عرض المحرر

عندما يفتح Git محررًا (رسالة commit، قائمة مهام rebase، رسالة وسم) يعرض المشهد الملف أثناء تحريره.

$try any command… (help)✎ Edit a file
عالق؟ الأوامر المرجّحة التالية
cat index.html
اعرض التعارض: نسختك بين <<<<<<< و=======، ونسختهم تحتها
code index.html
حلّه في المحرر (يُبقي الطرفين ويزيل العلامات)
git add index.html
بعد الحل: يخبر Git أن «index.html أُصلح»

ساحة التجربة

الدروس للمشاهدة فقط. لكتابة أوامرك الخاصة، افتح ساحة التجربة (الرابط أسفل كل رسم توضيحي): يتفاعل المخطط تمامًا كما في الدروس، وتقترح التلميحات الأوامر المرجّحة التالية عندما تتعثّر.

~/shop — bashgit fetch
# meanwhile… Sam pushes 7f94dc7 “Update README” to origin/main
$ git fetch
remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (1/1), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) Unpacking objects: 100% (3/3), 312 bytes | 312.00 KiB/s, done. From github.com:acme/shop 2e039ac..7f94dc7 main -> origin/main

أسطر الزميل

سطر سرد مثل «زميل يدفع…» يعني أن شخصًا آخر غيّر الخادم — وهذا سبب تصرّف push أو pull لاحق بتلك الطريقة.

4 رسالة واحدة في كل مرة

تُقسَّم الخطوة إلى مراحل. كل مرحلة تغيّر شيئًا واحدًا وتشرحه في تعليق أسفل المشهد؛ وكل ما عداه يخفت.

~/shop — bash① يُكتب الأمر
$ echo "<p>Sale</p>" >> index.html
ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZEمستودعك — ‎.git على حاسوبك2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: لافتة متحركة على commitHEADHEAD ← الفرع الذي أنت عليهREADME.mdدون تغييرapp.jsمجهَّزindex.htmlمعدَّلv1v1v1v2v2v1v3v2v2HEAD → main → 2e039ac “Add homepage”

السبب أولًا

يُكتب الأمر قبل أن يتحرك أي شيء، ولا تتغيّر اللوحات إلا عندما يصل أثره.

ملفاتك — ملف واحد، ثلاثة أماكنمجلد العملقرصكالتجهيزالـ commit التاليHEADآخر commitadd ›commit ›GITUALIZE☁ ORIGIN — github.com/acme/shop (مستودع آخر)مستودعك — ‎.git على حاسوبك2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit2b4c917Add to cart2b4c91785b581691dd1665ce1839576f03d6ac23 Add to cartmainmain: لافتة متحركة على commitorigin/mainorigin/main: إشارتك المحلية إلى مكان فرع origin عند آخر fetch/push لكHEADHEAD ← الفرع الذي أنت عليهmainmain: كما هو موجود على originREADME.mdدون تغييرapp.jsمجهَّزindex.htmlدون تغييرv1v1v1v2v2v1v2v2v2HEAD → main → 2e039ac “Add homepage”
يولد commit جديد 2b4c917 — لقطة لكل ما في منطقة التجهيز.
يتقدّم main إليه (ويتبعه HEAD — فهو يشير إلى main)

التعليق

ما حدث للتو ولماذا، في جملة واحدة. اللوحة بجانب الطرفية تكرّره مع شرح الخطوة.

  1. 1استكشافgit log --oneline
  2. 2أنت تعدّلecho "cart.push(item)" >> app.js
  3. 3ملف جديدecho "export function login() {}" > login.js
  4. 4اسأل Gitgit status
  5. 5التجهيزgit add app.js login.js

الفصول

القائمة المرقّمة أسفل الشرح. انقر أي خطوة للانتقال إليها.

5 عناصر التحكم

شغّله كفيديو أو تقدّم خطوة بخطوة.

⏮◀▶▶|1× ▾

⏮ ◀ ▶ ▶|

إعادة التشغيل، الخطوة السابقة، تشغيل / إيقاف مؤقت، الخطوة التالية.

⏮◀▶▶|1× ▾

الخط الزمني

اسحب للانتقال إلى أي لحظة من الدرس.

⏮◀▶▶|1× ▾

السرعة

من 0.5× إلى 2×.

Spaceتشغيل / إيقاف مؤقت←→الخطوة السابقة / التالية

لوحة المفاتيح

انقر على المشهد، ثم مفتاح المسافة = تشغيل / إيقاف مؤقت، و← / → = الخطوة السابقة / التالية.

6 صفحات الأوامر والخيارات والسيناريوهات

أين توجد الرسوم التوضيحية.

--force-with-leaseGit ≥ 1.8.5موصى به
▷ عرض الرسم التوضيحي

صفحة الأمر

يغطي الرسم التوضيحي الرئيسي الاستخدام اليومي للأمر. لكل خيار رسم قصير خاص به — افتحه من قائمة الخيارات.

موصى بهMainstream, safe choiceعند الحاجةUseful in specific casesغير موصى بهRisky or superseded

التوصية

يحمل كل خيار شارة: موصى به، أو عند الحاجة، أو غير موصى به، مع سبب في سطر واحد.

git add --editGit ≥ 1.6.4

افتح الـ diff في محررك قبل التجهيز. يمكنك اختيار التغييرات التي تدخل يدويًا.

$ git add -e app.js

لماذا لا توجد رسوم متحركة

يفتح git add -e الـ diff كله كـ patch في محررك؛ تحذف الأسطر التي لا تريد تجهيزها ويطبّق git ما تبقّى. إنه ملف يُعدَّل يدويًا، لا تغيير في حالة المستودع يمكن للمسرح تحريكه — وgit add -p هو المكافئ المرئي.

كيف يعمل

بعض الخيارات تعتمد على أشياء خارج المستودع (محرّرك، أذونات الملفات، نهايات الأسطر). لها بطاقة شرح بدل الرسوم المتحركة.

1بدء الميزة
تفرّع
$ git switch -c feature/login
صفحة تسجيل الدخول
$ echo "export function login() {}" > login.js && git add login.js && git commit -m "Add login page"
ربطها
$ echo "login()" >> app.js && git commit -am "Call login on load"

سيناريوهات

عروض من الواقع تُشغَّل كقصة متصلة، مقسّمة إلى أقسام بعناوين يمكنك النقر عليها.

الإعدادات

يضم زر الترس في الترويسة الإعدادات: اللغة، والموقع الفاتح أو الداكن، وسمة الرسوم التوضيحية، ووضع عمى الألوان، وحجم النص.

مستعد للتعلّم؟

اتبع سير عمل كاملًا، أو اختر أمرًا.