سؤال

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

اعتقدت أن هذا هو نهاية الأمر ، ولكن بعد ذلك أدركت أن هناك علامات جيتمارك في ملفاتي.مثل ذلك:

start =
    expression

validchar = 
    [0-9a-zA-Z_?!+\-=@#$%^&*/.]

integer = 
<<<<<<< HEAD
    digits:[0-9]+
        { return digits.join(""); }
=======
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages

تم تحرير الملفات ليس من قبلي وتظهر خطوط إدراجها مع:

  • الرأس بعد أقل من علامات (<<<<<<< HEAD)
  • سطور من التعليمات البرمجية التي تم تغييرها
  • سلسلة من علامات يساوي (=======)
  • الإصدار الجديد من الكود
  • خط آخر يبدأ مع أكبر من علامات واسم الفرع (>>>>>>> gh-pages)

ما هو أسوأ من ذلك هو أن محتويات الملف لم تعد في النظام.لا أحد يعرف كيف يمكنني الحصول على تلك الملفات إلى وضعها الطبيعي, والتغييرات التي أدليت بها في فرع غ اندمجت في الفرع الرئيسي?

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

المحلول

هؤلاء هم علامات الصراع.كنت لا تزال في عملية دمج ، ولكن كانت هناك بعض الأجزاء التي جيت لا يمكن دمج تلقائيا.عليك تحتاج إلى تحرير تلك الأجزاء يدويا إلى ما تريد لها أن تكون ومن ثم ارتكاب النتائج.


على سبيل المثال ، في حالتك الخاصة ، ربما ترغب في حلها على هذا النحو (ملاحظة-الأسهم / النص على اليمين هي مجرد ملاحظاتي ، وليس شيئا تكتبه في الملف):

integer = 
<<<<<<< HEAD                                  <-+ remove the bits here
    digits:[0-9]+                               |
        { return digits.join(""); }             |
=======                                       <-+
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages                              <-- and this

وبالتالي يمكنك حفظ الملف باسم...

integer = 
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }

نصائح أخرى

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

git mergetool

ستعمل أداة الدمج إذا كانت ملفاتك مدرجة على أنها تحتاج إلى دمج.

يمكنك أيضا تنفيذ واحدة من:

git checkout --ours -- /path/to/conflicted-file       # this is probably the one you want
git checkout --theirs -- /path/to/conflicted-file

يمكنك رؤية الإصدارات المختلفة باستخدام بناء جملة: 1: اسم الملف.انظر هنا للحصول على تفسير.ولكن كل ما سبق يفترض أن 'حالة جيت' يظهر الملفات كما تحتاج إلى دمج.

أخيرا ، لديك دائما خيار:

git reset --hard   # sounds like --hard is what you need but check other options

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

مثال على البرنامج النصي:

# vim /usr/sbin/solve.git

(إلحاق التالية)

#!/bin/bash
for f in $(grep -Rl '^>>>>>>> ' --include="*.php" --include="*.css" --include="*.js" --include="*.html" --include="*.svg" --include="*.txt" .)
do
sed -i -e '/^=======/,/^>>>>>>> /d' -e '/^<<<<<<< /d' $f
sed -i -e '/^>>>>>>> /d' $f
echo "$f Fixed"
done
git add . ; git commit -am "[+] Resolved on `date` from `hostname` by `whoami`" --no-verify

# chmod 755 /usr/sbin/solve.git

فقط قم بتشغيله في الريبو / المسار الخاص بك لحله:

$ cd <path_to_repo>
$ solve.git

إشعار: - ملحقات الملفات المذكورة أعلاه هي فب ، كس ، جس ، هتمل ، سفغ و تكست.

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

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

الآن ، نضع في اعتبارنا ، وهذا يعمل فقط إذا مباشرة بعد merge->add->commit, لقد أدركت أنك أفسدت, وتريد إعادة متابعة العملية.

الخطوة 1: إعادة تعيين إلى التزام سابق.

git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e

الخطوة 2: أعد محاولة دمج الفرع

git merge --ff origin/feature/YOUR-Branch_here

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

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