بعد ملف GIT RM ؛ الالتزام - كيفية استعادة الملف من الفرع البعيد؟

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

  •  26-09-2019
  •  | 
  •  

سؤال

كنت أسحب في دليل .emacs ، وضربت الصراع التالي:

CONFLICT (add/add): Merge conflict in elisp/dired-details+.el

أظهرت حالة git ما يلي:

 Unmerged paths:
 #   (use "git add/rm <file>..." as appropriate to mark resolution)
 #  both added:         elisp/dired-details+.el

حسنًا ، اقترح Git استخدام git rm. أرغب في استبدال الملف المحلي تمامًا بالملف الذي أسحبه ، لذلك يبدو نوعًا ما من المعقول ... لذلك أفعل git rm elisp/dired-details+.el و git merge. انا حصلت:

GIT MERGE: FATAL: أنت لم تنتهي دمجك (موجود merge_head). من فضلك ، ارتكب تغييراتك قبل أن تتمكن من الاندماج.

حسنا جيد: git commit -a -m "ugh merge conflicts"; git pull origin master.

الآن كل شيء يندمج بشكل جيد ، باستثناء أنني مفقود dired-details+.el, ، أنا في حيرة من أمري ، وأود أن أعرف الإجابات على ما يلي:

  1. كيف يمكنني التراجع git-rm والحصول على هذا الملف من الفرع البعيد؟ ..
  2. لماذا كان هناك صراع في المقام الأول؟ .. ما الذي يحدث هنا add/add?..
  3. ماذا يجب أن أفعل بدلاً من git-rm'جي الملف الذي أردت استبداله؟ ..
هل كانت مفيدة؟

المحلول

أولا ، التراجع عن الاندماج الخاص بك git reset --hard HEAD^. لاحظ أن هذا سوف يمحو الالتزام الأخير وإعادة تعيين نسخة العمل الخاصة بك إلى حالة الالتزام السابق ، لذا كن حذرًا في فهم ما سيفعله هذا قبل القيام بذلك. gitk يمكن أن تساعد في تصور هذا.

ثانية، git rm لا تفعل ما توقعته هنا. عندما يكون لديك تعارض دمج ، فأنت تنظر إلى الملف في حالة شبه مغرمة ، مع الملف الذي يحتوي على علامات تعارض لك لحل الصراع. في هذه المرحلة ، يُطلب منك إصلاح نسخة العمل على الحالة التي تريد أن تبدو الاندماج النهائي لتبدو. عن طريق إزالة الملف ، أخبرت Git أنك لا تريد أن يكون الملف موجودًا على الإطلاق ، وهو ما تريده.

ما تحتاج إلى القيام به في هذه المرحلة هو تحديث الملف المتضارب في نسخة العمل الخاصة بك إلى الإصدار الذي تريد الاحتفاظ به. عادة ما يتم ذلك عن طريق فحص علامات الصراع وتعديل الملف وفقًا لذلك. في حالتك ، إذا كنت تعرف على وجه اليقين أنك تريد النسخة من الفرع الذي تندمج منه ، فيمكنك استخدامه git show :3:elisp/dired-details+.el > elisp/dired-details+.el لفعل هذا. ثم git add elisp/dired-details+.el لإخبار Git أنك قمت بحل الصراع في هذا الملف ثم git commit لانهاء.

هنا، git show :3:... يطلب إصدار الملف من merge_head. إذا كنت بحاجة إلى إصدار مختلف ، فيمكنك أيضًا استخدامه 1 للجد المشترك أو 2 لجانب "الخاص بك" من الدمج.

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