سؤال

لقد بدأت بعض العمل على ميزة جديدة وبعد الترميز قليلاً ، قررت أن تكون هذه الميزة في فرعها الخاص.

كيف يمكنني نقل التغييرات غير الملتزمات الحالية إلى فرع جديد وإعادة ضبط بلدي الحالي؟

أرغب في إعادة ضبط فرعتي الحالية مع الحفاظ على العمل الحالي على الميزة الجديدة.

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

المحلول

استخدم ما يلي:

git checkout -b <new-branch>

سيترك هذا فرعك الحالي كما هو ، قم بإنشاء فرع جديد والخروج منه واحتفظ بجميع التغييرات. يمكنك بعد ذلك الالتزام بـ:

git add <files>

والالتزام بفرعك الجديد مع:

git commit -m "<Brief description of this commit>"

التغييرات في دليل العمل والتغييرات التي تم عرضها في الفهرس لا تنتمي إلى أي فرع حتى الآن. هذا يتغير حيث ستنتهي هذه التغييرات.

لم تكن إعادة تعيين فرعك الأصلي ، يبقى كما هو. الالتزام الأخير <old-branch> سيظل هو نفسه. لذلك أنت checkout -b ثم ارتكب.

نصائح أخرى

بدلاً عن ذلك:

  1. احفظ التغييرات الحالية إلى مخبأ مؤقت:

    $ git stash

  2. قم بإنشاء فرع جديد يعتمد على هذا الخبأ ، وانتقل إلى الفرع الجديد:

    $ git stash branch <new-branch> stash@{0}

نصيحة: استخدم مفتاح علامة التبويب لتقليل كتابة اسم الخبأ.

إذا كنت ترتكز على الالتزامات في فرعك الرئيسي أثناء ترميزك ، لكنك تريد الآن نقل هذه الالتزامات إلى فرع مختلف:

  1. انسخ تاريخك الحالي إلى فرع جديد ، وجلب أي تغييرات غير ملتزم بها أيضًا:

    git checkout -b <new-feature-branch>
    
  2. الآن إجبار الفرع الأصلي "الفوضوي" على التراجع: (دون التبديل إليه)

    git branch -f <previous-branch> <earlier-commit-id>
    

    علي سبيل المثال:

    git branch -f master origin/master
    

    أو إذا كنت قد جعلت 4 ارتباطات:

    git branch -f master HEAD~4
    

تحذير: يبدو أنه git branch -f master origin/master إرادة إعادة تعيين معلومات التتبع لهذا الفرع. لذلك إذا قمت بتكوين الخاص بك master فرع للدفع إلى مكان آخر غير origin/master ثم سيتم فقد هذا التكوين.

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

السيناريو الشائع هو ما يلي: لقد نسيت إنشاء الفرع الجديد للميزة الجديدة ، وكانت تقوم بكل الأعمال في فرع الميزات القديم. لقد ارتكبت كل العمل "القديم" إلى الفرع الرئيسي ، وأريد أن ينمو فرعتي الجديدة من "Master". لم أقضي التزامًا واحدًا بعملي الجديد. هنا هيكل الفرع: "Master"-> "Old_feature"

git stash 
git checkout master
git checkout -b "New_branch"
git stash apply

إذا كنت ترتكبها ، فيمكنك أيضًا اختيار معرف الالتزام الفردي. أفعل هذا في كثير من الأحيان عندما أبدأ العمل في Master ، ثم أرغب في إنشاء فرع محلي قبل أن أرفع إلى أصل/.

git cherry-pick <commitID>

هناك الكثير الذي يمكنك القيام به مع خيار الكرز ، كما هو موضح هنا, ، ولكن هذا يمكن أن يكون حالة استخدام لك.

انا إستعملت @روبين الإجابة وإدراج كل ما فعلته ،

git status                               <-- review/list uncommitted changes
git stash                                <-- stash uncommitted changes
git stash branch <new-branch> stash@{1}  <-- create a branch from stash
git add .                                <-- add local changes
git status                               <-- review the status; ready to commit
git commit -m "local changes ..."        <-- commit the changes
git branch --list                        <-- see list of branches incl the one created above
git status                               <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch>                <-- switch back

! إذا كان لدى الريبو أكثر من خبأ واحد ، فراجع أي واحد لتطبيقه على الفرع الجديد:

git stash list  
  stash@{0}: WIP on ...  
  stash@{1}: WIP on ...

وتفقد الخبأ الفردي من قبل ،

git stash show stash@{1}

أو فحص جميع المخبأ في وقت واحد:

git stash list -p

هناك بالفعل طريقة سهلة حقًا للقيام بذلك باستخدام سطح المكتب Github الآن بعد أن لا أعتقد أنه ميزة من قبل.

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

GitHub Desktop

قد يكون هذا مفيدًا لجميع أدوات استخدام GIT

أمر

Switch Branch - سوف ينقل التغييرات الخاصة بك إلى الفرع الجديد. ثم يمكنك ارتكاب تغييرات.

 $ git checkout -b <new-branch>

السلحفاة

انقر بزر الماوس الأيمن على مستودعك ثم استخدم السلحفاة-> التبديل/الخروج

enter image description here enter image description here

Sourcetree

استخدم زر "الخروج" لتبديل الفرع. سترى زر "Checkout" في الأعلى بعد النقر على فرع. سيتم تطبيق التغييرات من الفرع الحالي تلقائيًا. ثم يمكنك ارتكابهم.

enter image description here

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