بوابة دمج علامات الرأس اليسرى في ملفاتي
-
11-12-2019 - |
سؤال
حاولت دمج ملف في سطر الأوامر باستخدام بوابة ، عندما ظهرت رسالة خطأ تقول لي تم إحباط الدمج.
اعتقدت أن هذا هو نهاية الأمر ، ولكن بعد ذلك أدركت أن هناك علامات جيتمارك في ملفاتي.مثل ذلك:
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
في هذه المرحلة ، ستتم مطالبتك بإطار الدمج إذا كنت تستخدم واجهة مستخدم رسومية.ويمكنك بعد ذلك المضي قدما كالمعتاد.