كيفية جعل git merge يتعامل مع التغييرات غير الملتزم بها في شجرة العمل الخاصة بي؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

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

$ git merge origin/master
Updating 1b8c5c6..eb44c23
error: Entry 'blah.java' not uptodate. Cannot merge.

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

أسرع طريقة وجدتها للقيام بذلك في git هي:

$ git stash
$ git merge origin/master
$ git stash pop

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

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

المحلول

وبقدر ما استطيع ان اقول، وأفضل ما يمكنك القيام به هو ما لديك بالفعل مع git stash. أنا أيضا تجد أنه من الغريب أن دمج يريد أن يتعامل فقط مع الأشجار نظيفة.

نصائح أخرى

وننسى كل شيء تعلمته من أي وقت مضى من التخريب.

وارتكاب دوما قبل إدخال التغييرات الخارجية.

وتخيل كان لديك شجرة تعمل في الغالب - ربما ليست مثالية، ولكن كنت صنع بعض التقدم. ثم تذهب إلى القيام دمج ورمز كنت جلب عاثت فسادا فقط (كان عربات التي تجرها الدواب نفسها، والكثير من الصراعات التعامل معها، الخ ...). لن يكون ذلك جميلا إذا كنت يمكن أن مجرد التراجع عن ذلك؟

إذا ارتكابها، يمكنك. إذا لم تقم بذلك، كنت مجرد الذهاب للمعاناة.

وتذكر: ما يرتكبون لا <م> هل لديك أن يكون ما دفع، ولكن ما لم يكن لارتكاب يمكنك أن تفقد بسهولة

وفقط تفعل الشيء آمنة وسهلة والالتزام في وقت مبكر وارتكاب كثير من الأحيان.

  • إذا كان العمل المحلي غير ملتزم به
    • وقمت بتقديم ملفات جديدة تمامًا غير موجودة في الفرع البعيد:
    • أو أن الملفات المتأثرة بعملك المحلي لا تتداخل مع الملفات المتأثرة بالتغييرات التي تحتاج إلى سحبها من جهاز التحكم عن بُعد:
      • انت محظوظ: git pull سوف "تعمل فقط"
    • خلاف ذلك:
      • إذا لم تتداخل تغييراتك المحلية مع التغييرات التي تسحبها:
        • سوف يعمل git stash:
          • git stash save
          • git pull
          • git stash pop
      • إذا كانت تغييراتك المحلية تحتوي على بعض التداخل مع التغييرات التي تقوم بسحبها:
        • سيتطلب git stash حل التعارض يدويًا:
          • git stash save
          • git pull
          • git stash pop
          • حل تعارضات الدمج
          • git reset
          • git stash drop
  • إذا كان العمل المحلي ملتزما
    • والملفات المتأثرة بعملك المحلي لا تتداخل مع الملفات المتأثرة
      • انت محظوظ: git pull سوف "تعمل فقط"
      • لكن: git pull --rebase سوف "يعمل بشكل أفضل" بسبب التاريخ النظيف
      • لا يوجد التزام بالدمج؛سيتم الالتزام بالتغييرات الخاصة بك بعد التغييرات الأولية
    • خلاف ذلك:
      • سيتطلب سحب git حل التعارض يدويًا:
        • git pull
        • حل تعارضات الدمج
        • git add FILE لكل ملف متعارض
        • git commit
      • git pull --rebase لا يزال من الممكن "العمل بشكل أفضل" بسبب التاريخ النظيف
        • ومع ذلك، قد يكون حل تعارضات الدمج أصعب بكثير

للحصول على شرح مفصل يرجى الاطلاع على: https://happygitwithr.com/pull-tricky.html

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

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

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

إذا يقترفون التغييرات التجريبية أو التصحيح، قد تستخدم git rebase لنقلها بعد يرتكب تحصل عبر git merge لجعله أسهل للتخلص منها أو لتجنب دفعهم إلى مستودع بطريق الخطأ.

ملحوظة أن استخدام git rebase على فرع لديك دفعت إلى مستودع مشترك سوف يسبب الحزن للجميع الذي سحب من ذلك المخزون.

وأنا أفضل أن استخدام git stash في هذه الحالات، ولكن أنا فقط استخدامها إذا تغير دمج ملفات بأنني تحريرها وغير ملتزم.

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