٥، ١٢، رعاية مشروع
 — تحديد التغييرات الجديدة

لديك الآن فرع موضوع فيه مساهمات. يمكنك الآن أن تحدد ماذا ترى أن تفعل به. يراجع هذا الفصل أمرين حتى تعرف كيف ترى بهما ماذا سيتغيّر بالضبط عندما تدمجه في فرعك الرئيس.

كثيرًا ما يفيد أن ترى كل إيداعات هذا الفرع التي ليست في فرعك الرئيس. يمكن استبعاد إيداعات master بخيار --not قبل اسم الفرع. هذا يكافئ تمامًا صيغة master..contrib التي استعملناها سابقًا. مثلا إذا أرسل لك مساهمٌ رقعتين وأنشأت فرعًا أسميته contrib وطبّـقت هاتين الرقعتين فيه، فيمكنك أن تنفذ هذا:

$ git log contrib --not master
commit 5b6235bd297351589efc4d73316f0a68d484f118
Author: Scott Chacon <schacon@gmail.com>
Date:   Fri Oct 24 09:53:59 2008 -0700

    See if this helps the gem

commit 7482e0d16d04bea79d0dba8988cc78df655f16a0
Author: Scott Chacon <schacon@gmail.com>
Date:   Mon Oct 22 19:38:36 2008 -0700

    Update gemspec to hopefully work better

لرؤية تعديلات كل إيداع، لعلك تتذكر أن خيار الرقعة -p مع أمر السجل git log يُظهرها لك.

لرؤية الفرق الكامل لما سيحدث فعلًا عند دمج فرع الموضوع هذا مع فرع آخر، قد تضطر إلى حيلة غريبة لرؤية الفرق الصحيح. قد تفكر بتنفيذ هذا:

$ git diff master

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

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

ما تريد رؤيته فعلًا هو تعديلات فرع الموضوع: التعديلات التي ستقدّمها إلى الفرع الرئيس إذا دمجت فرع الموضوع فيه. ترى هذا بجعل جت يقارن آخر إيداع في فرع الموضوع مع آخر سلف مشترك مع الفرع الرئيس.

نظريًّا يمكن فعل هذا بحساب السلف المشترك ثم طلب الفرق معه:

$ git merge-base contrib master
36c7dba2c95e6bbb78dfa822519ecfec6e1ca649
$ git diff 36c7db

أو بشيء من الإيجاز:

$ git diff $(git merge-base contrib master)

لكن لا هذا ولا ذاك استعماله مريح، فيختصر لنا جت ذلك بـ«صيغة النقاط الثلاثة». فإذا أردت رؤية فروق الفرع الحالي منذ آخر إيداع مشترك مع فرع آخر، أعطِ أمر الفرق: الفرع الآخر وثلاث نقاط والفرع الحالي، بغير مسافة:

$ git diff master...contrib

لا يظهر لك هذا الأمر إلا تعديلات فرع contrib بعد آخر سلف مشترك مع فرع master. هذه الصيغة عظيمة النفع وتستحق التذكر.