ارتكاب تغييرات في فرع آخر ثم استئناف العمل في الفرع الحالي؟
-
28-09-2019 - |
سؤال
يحدث هذا في كثير من الأحيان في تدفق عملي: أنا أعمل على ميزة في فرع منفصل ، وبينما أفعل ذلك ، سأصادف أشياء صغيرة تحتاج إلى إصلاح ولكن من أعلى في الإطار أو تخطيط الموقع على سبيل المثال.
أريد العودة إلى الرئيسي طور الفرع والالتزام تغييرات من ملفات محددة هناك ، ثم العودة إلى أ خاصية فرع ، و rebase حتى أتمكن من الاستمرار هناك مع تعديلات/bugfixes غير ذات صلة خارج الطريق.
أنا استخدم git stash
و git stash pop
للقيام بذلك ، لكنني أتلقى الكثير من الصراعات من مجموعة من الملفات التي قمت بتعديلها ولكن لا أحتاج إلى الالتزام بالفرع الأصل على أي حال.
هل هناك طريقة أخرى لتجنب النزاعات أو حفظ الحالة الحالية بطريقة أو بأخرى ، وسحب فقط تغيير شجرة العمل إلى فرع آخر للارتباط؟ (نوع من مثل Git-Stash-Cherry-Pick ؛-))
المحلول
- ارتكب التغييرات التي تريدها
master
على فرعك الحالي. - خبأ التغييرات المتبقية
- التبديل إلى
master
الفرع والاستخدامgit cherry-pick
لنقل التغييرات إلىmaster
- العودة إلى فرع الريش الخاص بك ، و
rebase
(اختياري) - قم بفك تغييرات الميزة الأصلية
نصائح أخرى
عادة ما أفعل ذلك في العكس. أواصل العمل في فرع الميزات الخاص بي حتى أكون مستعدًا لالتزام هناك. بمجرد أن أكون ، أضيف جميع التغييرات التي تنتمي إلى الالتزام الجديد للفرع بالفهرس ، ولكن ليس تلك التي تنتمي إلى 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