سؤال

أريد دمج فرعين تم فصلهما لفترة من الوقت وأردت معرفة الملفات التي تم تعديلها.

جئت عبر هذا الرابط : http://linux.yyz.us/git-howto.html والذي كان مفيدًا جدًا.

الأدوات اللازمة لمقارنة الفروع التي صادفتها هي:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

كنت أتساءل عما إذا كان هناك شيء مثل "git Status master..branch" لرؤية تلك الملفات المختلفة بين الفرعين فقط.

بدون إنشاء أداة جديدة، أعتقد أن هذا هو أقرب ما يمكنك القيام به الآن (والذي بالطبع سيظهر تكرارًا إذا تم تعديل الملف أكثر من مرة):

  • git diff master..branch | grep "^diff"

كنت أتساءل عما إذا كان هناك شيء فاتني ...

هل كانت مفيدة؟

المحلول

لمقارنة الفرع الحالي ضد master فرع:

$ git diff --name-status master

للمقارنة بين أي فرعين:

$ git diff --name-status firstbranch..yourBranchName

تقرأ على git diff في ال الوثائق الرسمية.

نصائح أخرى

يحاول

$ git diff --stat --color master..branchName

سيعطيك هذا مزيدًا من المعلومات حول كل تغيير، مع الاستمرار في استخدام نفس عدد الأسطر.

يمكنك أيضًا قلب الفروع للحصول على صورة أوضح للفرق إذا كنت تريد الدمج في الاتجاه الآخر:

$ git diff --stat --color branchName..master

ضع في اعتبارك أيضًا أن git لديه تفرع رخيص وسهل.إذا كنت أعتقد أن الدمج قد يكون مشكلة، فأنا أقوم بإنشاء فرع للدمج.حتى إذا master لديه التغييرات التي أريد دمجها و ba هو فرعي الذي يحتاج إلى الكود من الرئيسي وقد أفعل ما يلي:

git checkout ba
git checkout -b ba-merge
git merge master
.... review new code and fix conflicts....
git commit
git checkout ba
git merge ba-merge
git branch -d ba-merge
git merge master

والنتيجة النهائية هي أنني قمت بتجربة الدمج على فرع بعيد قبل العبث بفرعي.إذا جعلت نفسي متشابكًا فيمكنني فقط حذف ba-merge فرع والبدء من جديد.

إذا كان أي شخص يحاول إنشاء ملف فرق من فرعين:

git diff master..otherbranch > myDiffFile.diff

هناك أيضًا طريقة تعتمد على واجهة المستخدم الرسومية.

يمكنك استخدام gitk.

  1. يجري:

    $ gitk --all
    
  2. انقر بزر الماوس الأيمن على التزام فرع وحدد ضع علامة على هذا الالتزام في القائمة المنبثقة.

  3. انقر بزر الماوس الأيمن على التزام فرع آخر وحدد فرق هذا -> الالتزام المحدد أو تم وضع علامة على الالتزام -> هذا.

بعد ذلك ستكون هناك قائمة ملفات تم تغييرها في اللوحة السفلية اليمنى وتفاصيل مختلفة في اللوحة السفلية اليسرى.

هناك خيار آخر، وهو استخدام meld في هذه الحالة:

git difftool -d master otherbranch

لا يسمح هذا برؤية الاختلافات بين الملفات فحسب، بل يوفر أيضًا طريقة سهلة للإشارة إلى ملف معين والنقر عليه.

لاحظ أن git يجعل من السهل تجربة الدمج والتراجع عن أي مشاكل إذا لم تعجبك النتيجة.قد يكون الأمر أسهل من البحث عن المشاكل المحتملة مقدمًا.

وإذا كنت تبحث عن تغييرات بين ملف (ملفات) معينة فقط، فعندئذٍ:

git diff branch1 branch2 -- myfile1.js myfile2.js

يعتبر الفرع 1 اختياريًا وسيتم أخذ فرعك الحالي (الفرع الذي تتواجد فيه) في الاعتبار افتراضيًا إذا لم يتم توفير الفرع 1.على سبيل المثال:

git diff master -- controller/index.js

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

إذا كان المنبع الخاص بك قد تم نقله، فيجب عليك القيام بذلك:

git fetch
git diff origin/master...

مجرد استخدام git diff master يمكن أن يتضمن التغييرات ذات الصلة أو يفشل في تضمينها.

إذا كنت تستخدم فكرة إنتيليج, ، يمكنك أيضًا مقارنة أي فرع بفرع العمل الحالي الخاص بك.يرى http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827 لمزيد من المعلومات.وهذا متوفر في طبعة مجانية أيضًا.

هناك فرعين دعنا نقول

  • أ (الفرع الذي تعمل فيه)
  • B (فرع آخر تريد المقارنة به)

يجري في فرع A يمكنك الكتابة

git diff --color B

ثم هذا سوف يعطيك مخرجات

enter image description here

النقطة المهمة في هذا الشأن هي

  1. النص باللون الأخضر موجود بالداخل في الفرع أ

  2. النص باللون الأحمر موجود في الفرع ب

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

سيؤدي ذلك إلى مقارنة الرئيسي بالفرع الذي نحن فيه (وهو ثانوي) وسيكون الكود الأصلي هو الأسطر المضافة والكود الجديد سيعتبر الأسطر المحذوفة

git diff ..master

أو

سيؤدي هذا أيضًا إلى مقارنة master بالفرع الذي نحن فيه (وهو ثانوي) وسيكون الكود الأصلي هو الأسطر القديمة والكود الجديد هو الأسطر الجديدة

git diff master..

إذا كنت تحب واجهة المستخدم الرسومية وتستخدم نظام التشغيل Windows، فإليك طريقة سهلة.

  1. تحميل برنامج وين ميرج
  2. تحقق من الفرعين في مجلدات مختلفة
  3. قم بإجراء مقارنة بين المجلدات والمجلدات باستخدام WinMerge.يمكنك أيضًا إجراء التعديلات بسهولة إذا كان أحد الفروع هو الذي تعمل عليه.
git diff revision_n revision_m

لو revision_n و revision_m هي ارتكابات متتالية ثم تنتج نفس الشيءgit show revision_m

بالنسبة للأشخاص الذين يبحثون عن حل واجهة المستخدم الرسومية، جيت كولا يحتوي على "Branch Diff Viewer" (عارض الفرق) اللطيف جدًا (فرق -> الفروع..).

يمكنك أيضًا استخدام أ الفرق البصري.

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

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

يمكنك أيضًا بسهولة مقارنة الفروع للملفات التي تم تغييرها باستخدام على سبيل المثال TortoiseGit.فقط اضغط على تصفح المراجع واختر الفروع التي تريد مقارنتها.

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

تذكر أنه سيكون لديك نتيجة مختلفة إذا قارنت يتقن مع فرعك و فرعك مع يتقن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top