it-swarm.dev

بوابة ، كيفية إعادة تعيين الأصل/ماجستير لارتكاب؟

أعيد تعيين سيدي المحلي إلى التزام بهذا الأمر:

git reset --hard e3f1e37

عندما أقوم بإدخال أمر $ git status ، تقول المحطة:

# On branch master
# Your branch is behind 'Origin/master' by 7 commits, and can be fast-forwarded.

#   (use "git pull" to update your local branch)
#
nothing to commit, working directory clean

نظرًا لأنني أرغب في إعادة تعيين الأصل/الرأس أيضًا ، أتحقق من الأصل/الرئيسي:

$ git checkout Origin/master
Note: checking out 'Origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 2aef1de... master problem fixed for master. its okay now.

وإعادة ضبط الرأس بواسطة هذا الأمر:

$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.

ثم حاولت إضافة التزام إلى Origin/head بأنني لم أكن ناجحًا.

$ git commit -m "Reverting to the state of the project at e3f1e37"
# HEAD detached from Origin/master
nothing to commit, working directory clean

أخيرًا ، أتحقق من سيدي المحلي.

$ git checkout master
Switched to branch 'master'
Your branch is behind 'Origin/master' by 7 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

نظرًا لأنني أعيد تعيين رئيس أصل/رئيسي أتوقع محليًا وأن يكون الأصل في نفس الاتجاه ، لكن كما ترى ، يقول git إن بلدي المحلي/الرئيسي هو خلف الأصل/الرئيسي بواسطة 7 تعهدات.

كيف يمكنني حل هذه المشكلة؟ الأشياء التي أبحث عنها هي Head of local/master و Origin/master point إلى الالتزام نفسه. الصورة التالية تبين ما فعلت. شكر.

enter image description here

197
Hesam

فروع Origin/xxx هي دائما مؤشر إلى جهاز تحكم عن بعد. لا يمكنك التحقق منها لأنها ليست مؤشرًا إلى مستودعك المحلي (يمكنك فقط تسجيل الخروج من الالتزام. ولهذا السبب لن ترى الاسم مكتوبًا في علامة فرع واجهة سطر الأوامر ، فقط تجزئة الالتزام).

ما عليك القيام به لتحديث جهاز التحكم عن بعد هو فرض تغييراتك المحلية على السيطرة:

git checkout master
git reset --hard e3f1e37
git Push --force Origin master
# Then to prove it (it won't print any diff)
git diff master..Origin/master
474
Simon Boudrias

الحل الموجود هنا ساعدنا في تحديث برنامج الماجستير إلى التزام سابق تم دفعه بالفعل:

git checkout master
git reset --hard e3f1e37
git Push --force Origin e3f1e37:master

الفرق الرئيسي من الإجابة المقبولة هو تجزئة الالتزام "e3f1e37:" قبل الرئيسي في أمر Push.

44
jkovacs

نظرًا لأنني واجهت موقفًا مشابهًا ، فقد ظننت أنني سأشارك موقفي وكيف ساعدتني هذه الإجابات (شكرًا للجميع).

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

في إحدى الليالي المتأخرة ، في خوف بجنون العظمة من فقدان تقدمي في تعطل الأجهزة أو أي شيء خارج الأثير ، قررت أن أدفع الماجستير إلى الأصل. بعد ذلك ظللت أقوم بتعديل فرعي الرئيسي المحلي ، وعندما قررت أن الوقت قد حان للدفع مرة أخرى ، واجهت فروعًا رئيسية مختلفة واكتشفت أنه لا يمكنني تعديل الأصل/المنبع ( duh! ) كأنني أستطيع أن أغادر فروع التنمية المحلية .

لذلك لم أكن أتقن برنامج الماجستير محليًا لأنني كنت بالفعل بعد الالتزام. السيد لم يتغير. لم أكن حتى بحاجة إلى إعادة تعيين - بشدة ، كان التزامي الحالي موافق.

لقد أجبرت Push to Origin فقط ، حتى دون تحديد الالتزام الذي كنت أرغب في فرضه على الماجستير لأنه في هذه الحالة يكون HEAD موجودًا. تم التحقق من git diff master..Origin/master لذلك لم تكن هناك أي اختلافات وهذا كل شيء. كل ثابت. شكر! (أعرف ، أنا مبتدئ git ، أرجوك سامح!).

إذا كنت موافقًا بالفعل على فرعك الرئيسي محليًا ، فقط:

git Push --force Origin master
git diff master..Origin/master
1
brokenthorn