كيف يمكنك إزالة مرجع فرع بعيد غير صالح من Git؟
-
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 لاستعادتها إلى ما قبل ذلك التاريخ مباشرةً والآن كل شيء يعمل بشكل جيد مرة أخرى.لقد قمت بتجريب البرقوق سابقًا، ولم يبدو أنه يساعد.ربما كانت عمليات التنظيف الأكثر قسوة قد نجحت.
آمل أن يكون هذا قد يساعد شخص آخر في يوم من الأيام!
جاي