تخطَّ إلى المحتوى
GitTree

الدرس 16 · العمل اليومي

صحّح رسالة إيداع محلي أو محتواه

صحّح عنوانًا ورسالة في إيداع واجهة خاص مع حفظ طرفه القديم. افهم استبدال الهوية ومنع دخول تجهيز غير متعلق.

حُفظ التقدّم في هذا المتصفح.

يحمّل التشغيل الفيديو من YouTube (وضع الخصوصية المحسّنة).

تعليق صوتي بالإنجليزية · ترجمة إنجليزية وعربية

افتح صفحة الفيديوشاهد على YouTube

ما ستتعلمه

  • افحص الإيداع المستبدَل.
  • افصل تعديل المحتوى عن الرسالة وحدها.
  • احفظ الطرف المودع القديم.
  • افحص الهوية الجديدة والأب الثابت.

قبل البدء

تبدأ من نسخة منفصلة من نتيجة الدرس الخامس عشر على فرع scenario/amend. تُودَع صفحة HEADING_DRAFT كاملة برسالة fix: hedaing؛ والعمل خالٍ والإيداع غير منشور. ويحفظ rescue/before-amend هذا الطرف بالضبط.

سُجّل الفيديو باستخدام Git 2.52.0 وGitTree 2.0 على Ubuntu 24.04: التصحيح والتعديل (amend) وتعديل الرسالة وحدها جرت في التطبيق؛ أما المسودة وفرع الإنقاذ والفحوص ففي الطرفية. لم يُشغَّل شيء على macOS أو Windows، وUbuntu هو نظام Linux الوحيد المسجَّل. الحد الأدنى المقروء لـ GitTree هو Git 2.39.0.

يطلب GitTree تسجيل الدخول، ثم تشمل الخطة المجانية كل خطوات الدرس. لا مزوّد أو Pro أو اعتماد API أو خدمة إنترنت مطلوبة. الوجهة المحلية المجردة ليست GitLab أو CI. الهويات خيالية example.com؛ لا تنفذ الدرس في مستودع مصدر.

نفّذ التغييرات عبر التطبيق أو الطريق الأصلي من الحالة نفسها، لا كليهما بالتتابع. يمكن التحقق بالقراءة بعد أيهما. تُسمَّى التهيئة الطرفية أصلية، لا ميزة تطبيق مختلقة.

الفكرة وأثر الأفعال

ينشئ التعديل بديلًا لآخر إيداع من الفهرس الحالي، لا ملحقًا صغيرًا للكائن القديم. قد تتغير الرسالة والمحتوى ويبقى القديم بالحفظ.

يجب ألا تضم مراجعة الرسالة تجهيزًا غير متعلق. يعيد مسار تحرير رسالة الإيداع (Edit Commit Message) كتابة الإيداع المختار وتوابعه، ويختلف عن تعديل آخر إيداع في المحرر.

تضمن الرسالة المختلفة هوية جديدة؛ اتفاق الأب ليس اتفاق الكائن. لا تصف تعديل المنشور الذي اعتمد عليه غيرك بأنه تحرير بلا أثر.

يصبح الفهرس إيداعًا بديلًا ويتحرك فرع السيناريو إلى C′ وأبوه M؛ الحفظ C والأصل والبعيد ثابتة.

إعداد حالة المشروع المحددة

ابدأ نسخة عادية منفصلة من المشروع النظيف كما تركه الدرس الخامس عشر. يبقى gittree-features الأصلي محفوظًا ولا تنفذ في مستودع مصدر. (كانت خطة سابقة للدورة تبدأ هذا الدرس من نتيجة درس دمج لاحق لم يُسجَّل بعد، فيستخدم الفيديو مشروع الدرس الخامس عشر بالخطوات نفسها.) نصا الصفحة أدناه هما index.html للمشروع مع تغيير عنوان البطل وحده. الهوية محلية خيالية والتوقيع معطل.

مدخلات الملفات كاملة

احفظ في المرحلة المحددة فقط بصيغة UTF-8 وLF وسطر نهائي. لا تلصق أسوار Markdown. ترث الملفات الثابتة نقطة البداية؛ لا تستبدل الأصل بنسخة إعادة منفصلة.

index.html — HEADING_DRAFT

مقتطف من ملف · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">See your work cleary.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

index.html — HEADING_FIXED

مقتطف من ملف · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">See your work clearly, one change at a time.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

في GitTree

لوحة الأوامر: Command+Shift+P (وCtrl+Shift+P على Ubuntu)، ثم الأمر المحدد حرفيًا. أفعال المرجع المسمّى في قائمة صفه، لا اختصار لوحة بلا وسيط.

  1. أعد المسودة الخاصة وفرع الحفظ كما في القسم التالي، وتحقق من أن أي مستودع بعيد لا يحوي المسودة.
  2. عرض الملفات (Show Files) ← index.html؛ احفظ HEADING_FIXED كاملًا مع إبقاء بقية الصفحة كما هي.
  3. عرض تغييرات مجلد العمل (Show Working Changes)؛ افحص استبدال العنوان وحده ثم تجهيز الملف (Stage File) على index.html.
  4. فعّل تعديل الإيداع الأخير (Amend Previous Commit) في محرّر الإيداع وراجع آخر إيداع يُستبدَل فعليًا، لا صفًا أقدم محدَّدًا في المخطط. (في هذا الإصدار لا يملأ حقل الملخّص (Summary) بالرسالة القديمة؛ تكتب الجديدة في الخطوة التالية.)
  5. اكتب في الملخّص fix: clarify the hero heading، وأبقِ الدفع وSigned-off-by وتخطّي الخطّافات وسائر الخيارات معطّلة، وراجع المحتوى المُجهَّز.
  6. أرسل مرة واحدة بـ Command+Enter (وCtrl+Enter على Ubuntu) من المحرّر وانتظر الإتمام الفعلي دون إيداع عادي ثانٍ. يُعطَّل خيار تعديل الإيداع الأخير تلقائيًا بعده.
  7. تحقق أن C′ الفعلي يختلف عن C في فرع الحفظ، وأن الأب نفسه، وأن HEADING_FIXED كامل وأن العمل خالٍ. أوقف تعديل الإيداع الأخير قبل أي عمل عادي لاحق.
  8. بديل الرسالة فقط، في نسخة منفصلة ما زالت تحمل المسودة: انقر الإيداع بزر الفأرة الأيمن ← تعديل السجل (Edit History) ← تحرير رسالة الإيداع… (Edit Commit Message…). يحمل الحوار عنوان «تحرير رسالة» ومعرّف الإيداع المختصر (Edit Message of) ويذكر أن الإيداع وكل ما فوقه يأخذ معرّفات جديدة. بدّل الرسالة (Message) بالملخّص المصحَّح بالضبط ثم حفظ الرسالة (Save Message). تبقى الشجرة والأب كما هما ويتغير المعرّف والرسالة فقط. لا تكرر هذا على النتيجة المعدَّلة.

لكل إيداع عادي: الملخّص بالملخّص المحدد والوصف (Description) خالٍ؛ خيارات تعديل الإيداع الأخير وتخطّي الخطّافات (Skip Hooks) وإضافة Signed-off-by (Add Signed-off-by) ومؤلف مختلف (Different Author) والدفع بعد الإيداع (Push After Commit) والسماح بإيداع فارغ (Allow Empty Commit) معطلة ودون مؤلفين مشاركين. جهّز الملفات المحددة ثم زر الإيداع ذي العدد الصحيح مرة واحدة، أو Command+Enter كبديل. درس التعديل الأخير وحده يغير خياره الصريح.

في الطرفية

في نسخة منفصلة من نتيجة الدرس الخامس عشر:

الأمر · bash
git switch --create scenario/amend

ضع HEADING_DRAFT مكان index.html (حفظ الفيديو ملف الدرس في ~/Downloads ويستخدم cp ~/Downloads/HEADING_DRAFT.html index.html) ثم:

الأمر · bash
git add -- index.html
git commit --quiet -m "fix: hedaing"
git branch rescue/before-amend

احفظ HEADING_FIXED كاملًا ثم:

الأمر · bash
git add -- index.html
git commit --quiet --amend --message "fix: clarify the hero heading"
git log -1 --format=%s
git rev-parse HEAD rescue/before-amend HEAD^ rescue/before-amend^
git status --short

الملخّص المرصود:

الناتج
fix: clarify the hero heading

يختلف أول معرّفين ويتفق آخرهما؛ الملف المسجل HEADING_FIXED والعمل خالٍ. بديل رسالة فقط في نسخة مسودة خالية يستخدم git commit --amend --only -m "fix: clarify the hero heading" لتجنب تجهيز غير متعلق. إعادة الصياغة من المخطط مسار تطبيق مستقل يحتاج فحص الإصدار الفعلي.

النتيجة

حيث تنتهي: الإيداع البديل برسالة الإصلاح ويحمل HEADING_FIXED؛ أبوه نفس القديم وهويته مختلفة، والقديم محفوظ والعمل خاص وخالٍ.

أخطاء شائعة

  • تعديل الإيداع مع ملفات مجهزة غير متعلقة.
  • اعتبار النسخة البديلة نقطة الأصل.
  • تكرار تغيير اكتمل في التطبيق.

إن حدث خطأ

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

اختبر فهمك

أجب عن كل سؤال ثم اقرأ السبب. الأسئلة المعلَّمة «مطلوب» تُحتسب لإكمال الدرس.

  1. السؤال 1 من 6

    ماذا ينشئ التعديل؟

    اختر إجابة واحدة.

  2. السؤال 2 من 6

    ماذا يُراجع؟

    اختر كل إجابة صحيحة.

  3. السؤال 3 من 6
    مطلوب

    أب C′ المصحح؟

    اختر إجابة واحدة.

  4. السؤال 4 من 6
    مطلوب

    جهّز ملفًا غير متعلق قبل التعديل: المحتوى؟

    اختر إجابة واحدة.

  5. السؤال 5 من 6

    المسودة منشورة: تعاملها كخاصة؟

    اختر إجابة واحدة.

  6. السؤال 6 من 6
    مطلوب

    ما الدليل؟

    اختر كل إجابة صحيحة.

0 من 6 صحيحة

أجب عن الأسئلة المطلوبة إجابة صحيحة لتكمل الدرس.

جرى التحقق في هذا المتصفح.

تدريب

أثبت الأب والهوية والعنوان والرسالة والخلو. توقع دخول ملف مجهز إضافي في إعادة منفصلة.

تأكيد منك أنت: لا يستطيع الموقع رؤية جهازك.

لإكمال الدرس، أجب عن الأسئلة المطلوبة إجابة صحيحة وأكّد تنفيذ التمرين العملي.

خلاصة

  • ينشئ التعديل بديلًا.
  • يحكم الفهرس المحتوى.
  • للرسالة وحدها نطاق مستقل.

المصطلحات الجديدة

Amend — تعديل الإيداع الأخير; reword — إعادة صياغة; replacement commit — إيداع بديل.

نص الفيديو

ترجمة التعليق الصوتي الإنجليزي للفيديو، مقطعًا بعد مقطع.

اعرض النص
  1. ابدأ من نقطة الحالة المحددة.
  2. سمِّ الفرع ونسخة الفهرس ونسخة العمل.
  3. أعدّ نسخة الدورة المعزولة وحدها.
  4. احفظ المسودة الخاصة قبل استبدالها.
  5. احفظ التصحيح المقصود كاملًا.
  6. راجع الفهرس لا الرسالة وحدها.
  7. يستبدل التعديل آخر إيداع فعلي.
  8. اكتب الملخّص المصحح صراحةً.
  9. أرسل البديل مرة واحدة.
  10. اتفاق الأب لا يعني الهوية نفسها.
  11. لتعديل الرسالة وحدها نطاق مختلف.
  12. ماذا ينشئ التعديل؟
  13. كائنات Git ثابتة؛ للبديل هوية جديدة.
  14. ماذا يُراجع؟
  15. يستخدم التعديل الفهرس وآخر إيداع.
  16. أب C′ المصحح؟
  17. يحل البديل في موضع النسب نفسه.
  18. جهّز ملفًا غير متعلق قبل التعديل: المحتوى؟
  19. يحدد الفهرس الحالي شجرة البديل.
  20. المسودة منشورة: تعاملها كخاصة؟
  21. قد يعتمد الآخرون على الهوية المنشورة.
  22. ما الدليل؟
  23. افحص الهوية البديلة والمحتوى.
  24. تحقّق من النتيجة الفعلية، لا رسالة وحدها.
  25. توقّع نتيجة المُدخل المختلف قبل الفعل.
  26. احتفظ بالعمل المفيد قبل الاستعادة.
  27. أثبت نقطة الحالة قبل المتابعة.
  28. احتفظ بالنتيجة المتحققة للخطوة التالية.