ارتكاب تغييرات في فرع آخر ثم استئناف العمل في الفرع الحالي؟

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

سؤال

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

أريد العودة إلى الرئيسي طور الفرع والالتزام تغييرات من ملفات محددة هناك ، ثم العودة إلى أ خاصية فرع ، و rebase حتى أتمكن من الاستمرار هناك مع تعديلات/bugfixes غير ذات صلة خارج الطريق.

أنا استخدم git stash و git stash pop للقيام بذلك ، لكنني أتلقى الكثير من الصراعات من مجموعة من الملفات التي قمت بتعديلها ولكن لا أحتاج إلى الالتزام بالفرع الأصل على أي حال.

هل هناك طريقة أخرى لتجنب النزاعات أو حفظ الحالة الحالية بطريقة أو بأخرى ، وسحب فقط تغيير شجرة العمل إلى فرع آخر للارتباط؟ (نوع من مثل Git-Stash-Cherry-Pick ؛-))

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

المحلول

  1. ارتكب التغييرات التي تريدها master على فرعك الحالي.
  2. خبأ التغييرات المتبقية
  3. التبديل إلى master الفرع والاستخدام git cherry-pick لنقل التغييرات إلى master
  4. العودة إلى فرع الريش الخاص بك ، و rebase (اختياري)
  5. قم بفك تغييرات الميزة الأصلية

نصائح أخرى

عادة ما أفعل ذلك في العكس. أواصل العمل في فرع الميزات الخاص بي حتى أكون مستعدًا لالتزام هناك. بمجرد أن أكون ، أضيف جميع التغييرات التي تنتمي إلى الالتزام الجديد للفرع بالفهرس ، ولكن ليس تلك التي تنتمي إلى Master. git add -p et.al جعل ذلك سهل حقا. بمجرد كل التغييرات ذات الصلة في الفهرس ، ألتزم بالفرع. جميع التغييرات القذرة المتبقية تنتمي إلى Master وسيتم حملها على ما يرام بمجرد التبديل إلى ذلك حتى أتمكن من ارتكابها هناك.

حاول العودة إلى master فرع باستخدام --merge اختيار. سيحاول القيام بدمج ثلاث طرق بين الفرعين. وثائق GIT لها مثال جيد:

2. After working in the wrong branch, switching to the correct
   branch would be done using:

      $ git checkout mytopic

   However, your "wrong" branch and correct "mytopic" branch
   may differ in files that you have modified locally, in which 
   case the above checkout would fail like this:

      $ git checkout mytopic
      error: You have local changes to 'frotz'; not switching branches.

   You can give the -m flag to the command, which would try a
   three-way merge:

      $ git checkout -m mytopic
      Auto-merging frotz

   After this three-way merge, the local modifications are not
   registered in your index file, so git diff would show you what
   changes you made since the tip of the new branch.

على ماكوس ، gitx يجعل من السهل جدًا القيام بنوع من الالتزام الانتقائي الذي يصفه RAFL ، بحيث تكون هذه طريقة جيدة للاقتراب منه إذا كانت هذه هي البيئة التي أنت فيها.

من الممكن/عملي أيضًا ارتكاب تغييرات في الفرع-Y. git format-patch لتصدير الالتزامات من الفرع كملفات و git am لسحبهم إلى السيد.

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

ماذا عن إنشاء فرع مؤقت؟

شيء مثل:

- oh crap need to do somethning else now
- git checkout -b ResumeLater
- git add .
- git commit
- git checkout ImportantStuff
- ....
- git checkout ResumeLater
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top