استخدام بوابة كيف يمكنني انتقائي دمج التغييرات من ارتكاب على آخر 'شوكة'?

StackOverflow https://stackoverflow.com/questions/1405030

  •  05-07-2019
  •  | 
  •  

سؤال

خذ هذا السيناريو:

  1. قررت 'شوكة' تعليمات البرمجة الأساسية في github.com و تبدأ في فعل روتيني:تحرير - الالتزام - دفع ؛ الملقب هاك هاك هاك.
  2. بعد إجراء بعض التغييرات ، أرى بعض التغييرات شخص آخر على نفس المشروع ، وأنا مثلهم!
  3. قررت أنني أريد أن دمجها في الألغام.المشكلة هي أنني فقط أريد 'جزء' من معين واحد يرتكبون من عدة يرتكب قام بها.

ما يمكن أن يكون الأسلوب الأكثر فعالية الحصول على هذه حدد مبلغ من التغييرات ، اندمجت في بلدي 'شوكة'?

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

المحلول

بعد التصيد موجات من المركز العالمي أحدهم أعطى حلا رائعا:

git cherry-pick SHA1 --no-commit
git add --patch

نأمل أن يساعد أي شخص آخر مع نفس السؤال!

تحرير:حسنا, ربما ليس بتلك البساطة.هنا هي الخطوات الكاملة:

  1. أولا عليك أن تكون في المخزون الخاص بك ، هل اللازمة cd-ing للحصول على دليل العمل الخاص بك.

  2. أنت الآن بحاجة إلى إضافة جهاز التحكم عن بعد فرع ثم جلب عليه.القيام بذلك عن طريق:

    git remote add someUser git://github.com/someUser/someRepo.git

    git fetch someUser

  3. يمكنك الآن تشغيل الأوامر مثل git log someUser/master العثور على ارتكاب SHA1 تريد دمجها في 'جزئيا'.

  4. مرة واحدة لديك شا, يمكنك الآن تشغيل:

    git cherry-pick -n SHA1

    حيث SHA1 هو ارتكاب شاء ، دوه!

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

  6. الآن لديك لإعادة تعيين المؤشر إلى رئيس التنقيح ، ثم بعد ذلك يمكنك استخدام مضمونة بوابة add --patch الأمر انتقاء واختيار ما هي التغييرات التي تريد:

    git reset HEAD

    git add --patch أو git add -p

  7. ياي!ارتكاب الوقت:

    git commit -m "I merged a select amount of changes"

  8. لتنظيف الفوضى (على قلته لا في git add --patch) و تبقي فقط على التغييرات المحددة في العمل الخاص بك مستودع تشغيل:

    git reset --hard HEAD

    على ما يبدو git checkout -f هو خيار آخر أيضا.

نصائح أخرى

أنا لست واضحة على ما تريد.إذا كنت ترغب في جلب بعض يرتكب من الشوك ، يمكنك استخدام git cherry-pick SHA.شرح كامل على gitready.

أنا حقا مثل تيم الحل, لكن أحيانا أحب ترقيع في vimdiff.الحل لهذه المشكلة هو الخام ، لكنه يعمل بالنسبة لي لأنني أحب همة.

لدي vimdiff تعيين بلدي difftool ثم انتقائي دمج أنا المهرجان الفرع:

git difftool <branch> <file>

ثم أذهب إلى جزء مع الفرع الحالي إصدار وتحرير الأصلي في همة (في بعض الأحيان هذا ليس ضروري, ولكن في بعض الأحيان vimdiff يفتح نسخة في /tmp) و تعطيل وضع القراءة فقط:

:e <file>
:set readonly!

الآن يمكنني استخدام همة التصحيح أدوات مثل do و dp لتطبيق ما أريد ، وجعل البعض القليل من التعديلات كما ذهبت.عندما انتهيت, لقد حفظ الملف الخروج من همة ، ثم مرحلة ارتكاب الملف في بوابة مثل العادية تحرير.

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

vimdiff سبيل المثال http://j.mp/1dZVllt

إذا كنت تريد فقط ميناء ارتكاب ربما أنت أفضل حالا من قبل قطف الكرز ارتكاب تريد إعادة الملفات التي لا تريد لمسها.

git cherry-pick SHA1
git checkout HEAD file1 file2 ... fileN

بالطبع, إذا كان لديك العديد من الأجزاء المعدلة في ملف وتريد فقط للحفاظ على بعض منهم لا يوجد لديك خيار سوى تحرير الملف يدويا قطع التغييرات الخاصة بهم.

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