كيف يمكنك إزالة مرجع فرع بعيد غير صالح من Git؟

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

  •  21-08-2019
  •  | 
  •  

سؤال

في الريبو الحالي لدي الإخراج التالي:

$ git branch -a
* master
  remotes/origin/master
  remotes/public/master

أريد الحذف remotes/public/master من قائمة الفروع:

$ git branch -d remotes/public/master
error: branch 'remotes/public/master' not found.

كما أن إخراج git remote أمر غريب، لأنه لا يدرج public:

$ git remote show 
origin

كيف يمكنني حذف "remotes/public/master" من قائمة الفروع؟

التحديث، حاول git push يأمر:

$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
هل كانت مفيدة؟

المحلول

ربما تحتاج إلى عملية تنظيف

git gc --prune=now

أو ربما تحتاج إلى تقليم

git remote prune public

تقليم

يحذف كافة فروع التتبع التي لا معنى لها ضمن <الاسم>.تمت بالفعل إزالة هذه الفروع القديمة من المستودع البعيد المشار إليه بواسطة <name>، ولكنها لا تزال متاحة محليًا في "remotes/<name>".

باستخدام خيار --dry-run، قم بالإبلاغ عن الفروع التي سيتم تقليمها، ولكن لا تقم بتقليمها فعليًا.

ومع ذلك، يبدو أنه كان ينبغي تنظيف هذه الأشياء مسبقًا

git remote rm public 

جمهورية مقدونيا

قم بإزالة جهاز التحكم عن بعد المسمى <name>.جميع فروع التتبع عن بعد وإعدادات التكوين لجهاز التحكم عن بعد تتم إزالتها.

لذلك ربما تكون قد قمت بتحرير ملف التكوين الخاص بك يدويًا ولم يحدث ذلك، أو أن لديك مشكلات في الامتيازات.

ربما قم بتشغيل ذلك مرة أخرى وانظر ماذا سيحدث.

سياق النصيحة

إذا ألقيت نظرة في سجلات المراجعة, ، ستلاحظ أنني اقترحت المزيد من التقنيات "الصحيحة"، والتي لأي سبب من الأسباب لا تريد العمل في مستودعها.

شككت في أن OP قد فعل شيئًا ترك شجرتهم في حالة غير متناسقة مما جعلها تتصرف بشكل غريب بعض الشيء، و git gc كان مطلوبًا لإصلاح السفينة اليسرى.

عادة git branch -rd origin/badbranch يكفي لقصف فرع التتبع المحلي بالأسلحة النووية، أو git push origin :badbranch لقصف فرع بعيد بالأسلحة النووية، و عادة سوف تفعلها أبداً بحاجة للاتصال git gc

نصائح أخرى

كل ما عليك فعله هو

git fetch -p

سيؤدي ذلك إلى إزالة جميع فروعك المحلية التي تم حذفها عن بعد.

إذا كنت تستخدم الإصدار 1.8.5+ من git، فيمكنك ضبط هذا تلقائيًا

git config fetch.prune true

أو

git config --global fetch.prune true
git push public :master

سيؤدي هذا إلى حذف الفرع البعيد المسمى master كما أشار كينت فريدريك.

لإدراج فروع التتبع عن بعد:

git branch -r

لحذف فرع التتبع عن بعد:

git branch -rd public/master

كل ما عليك فعله هو

$ git branch -rd origin/whatever 

بكل بساطة.لا يوجد سبب لاستدعاء gc هنا.

git gc --prune=now ليس ما تريد.

git remote prune public

أو git remote prune origin # إذا كان هذا هو المصدر البعيد

هو ما تريد

الإجابة المقبولة لم تنجح بالنسبة لي عندما كان المرجع مكتظًا.لكن هذا يفعل:

$ git remote add public http://anything.com/bogus.git
$ git remote rm public

في حالتي كنت أحاول حذف الإدخالات التي تم حفظها فيها .git/packed-refs.يمكنك تحرير هذا الملف النصي العادي وحذف الإدخالات منه git br -D لا يعرف كيفية اللمس (على الأقل في الإصدار 1.7.9.5).

لقد وجدت هذا الحل هنا: https://stackoverflow.com/a/11050880/1695680

git push origin --delete <branch name>

مشار إليه من: http://www.gitguys.com/topics/adding-and-removing-remote-branches/

كان لدي مشكلة مماثلة.لم تساعد أي من الإجابات.في حالتي كان لدي مستودعان بعيدان تمت إزالتهما يظهران بشكل دائم.

كانت فكرتي الأخيرة هي إزالة جميع الإشارات إليها يدويًا.

لنفترض أن المستودع يسمى "Repo".فعلتُ:

find .git -name Repo

وحذف الملفات والدلائل المقابلة

grep Repo -r .git

عثر هذا على بعض الملفات النصية التي قمت فيها بإزالة الأسطر المقابلة.الآن، يبدو أن كل شيء على ما يرام.

عادةً يجب عليك ترك هذه الوظيفة لـ git.

لم أكن أعرف عن git branch -rd, ، لذا فإن الطريقة التي قمت بها لحل مشكلات مثل هذه بنفسي هي التعامل مع الريبو الخاص بي باعتباره الريبو عن بُعد وإجراء الحذف عن بُعد. git push . :refs/remotes/public/master.إذا لم تنجح الطرق الأخرى وكان لديك بعض المراجع الغريبة التي تريد التخلص منها، فهذه الطريقة الأولية مؤكدة النجاح.فهو يمنحك الدقة الدقيقة لإزالة (أو إنشاء!) أي نوع من المراجع.

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

لكننا اعتقدنا أنه لم يتم فعل أي شيء لإفساد الأمور.يقوم NFS بعمل لقطات، لذلك قمت بمراجعة كل "إصدار سابق" ورأيت أنه قبل ثلاثة أيام، ارتفع حجم المستودع بالميجابايت من 282 ميجابايت إلى 33 ميجابايت، ويوجد الآن حوالي 1403 ملفًا جديدًا و300 مجلد.لقد استفسرت عن زملائي في العمل وحاول أحدهم القيام بالدفع في ذلك اليوم - ثم ألغاه.

لقد استخدمت وظيفة "استعادة" NFS لاستعادتها إلى ما قبل ذلك التاريخ مباشرةً والآن كل شيء يعمل بشكل جيد مرة أخرى.لقد قمت بتجريب البرقوق سابقًا، ولم يبدو أنه يساعد.ربما كانت عمليات التنظيف الأكثر قسوة قد نجحت.

آمل أن يكون هذا قد يساعد شخص آخر في يوم من الأيام!

جاي

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