إدراج وحذف بوابة يرتكب التي هي تحت أي فرع (التعلق?)

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

  •  04-10-2019
  •  | 
  •  

سؤال

لدي Git مع الكثير من يرتكب التي هي قيد أي فرع أستطيع git show لهم, ولكن عندما أحاول قائمة الفروع التي تحتوي عليها ، التقارير مرة أخرى لا شيء.

ظننت أن هذا هو التعلق يرتكب/شجرة المسألة (نتيجة -د فرع) لذا مجردة الريبو ، ولكن ما زلت أرى نفس السلوك بعد ذلك:

$ git fetch origin

$ git fsck --unreachable
$ git fsck

أي إخراج شيء التعلق (أليس كذلك؟).ولكن ارتكاب موجود

$ git show 793db7f272ba4bbdd1e32f14410a52a412667042
commit 793db7f272ba4bbdd1e32f14410a52a412667042
Author: ...

وأنه لا يمكن الوصول إليها من خلال أي فرع

$ git branch --contains 793db7f272ba4bbdd1e32f14410a52a412667042

لا يعطي الإخراج.

بالضبط ما هي الدولة التي يرتكبها ؟ كيف يمكنني القائمة كل من يرتكب في نفس الدولة ؟ كيف يمكنني حذف يرتكب مثل هذه ؟

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

المحلول

أي إخراج شيء التعلق (أليس كذلك؟)

علما أن يرتكب المشار إليها من reflog تعتبر قابلة للوصول.

بالضبط ما هي الدولة التي يرتكبها ؟ كيف يمكنني القائمة كل من يرتكب مماثلة الدولة

تمر --no-reflogs لإقناع git fsck أن تظهر لك.

كيف يمكنني حذف يرتكب مثل هذه ؟

مرة واحدة reflog إدخالات انتهت تلك الكائنات ثم أيضا تنظيفها من قبل git gc.

انتهاء ينظمه gc.pruneexpire, gc.reflogexpire, ، gc.reflogexpireunreachable الإعدادات.را. git help config.

التخلف كلها معقولة جدا.

نصائح أخرى

لإزالة جميع التعلق يرتكب تلك التي يمكن الوصول إليها من reflogs القيام بذلك:

git reflog expire --expire-unreachable=now --all
git gc --prune=now

ولكن كن على يقين من أن هذا هو ما تريد.أنصحك بقراءة صفحات الرجل ولكن هنا هو جوهر:

git gcيزيل إليه الكائنات (يرتكب, الأشجار, النقط (الملفات)).كائن هو بعيد المنال إذا لم يكن جزءا من تاريخ بعض الفروع.في الواقع هو أكثر تعقيدا:

git gc هل بعض الأشياء الأخرى ولكنها ليست ذات أهمية هنا ليست خطيرة.

يمكن الوصول الأجسام التي هي أصغر من أسبوعين لا تتم إزالة لذلك نستخدم --prune=now وهو ما يعني "إزالة الوصول الكائنات التي تم إنشاؤها قبل الآن".

الأشياء كما يمكن الوصول إليه من خلال reflog.بينما فروع سجل تاريخ بعض المشاريع ، reflogs سجل تاريخ هذه الفروع.إن تعديل أو إعادة تعيين.... الخيرتكب يتم إزالتها من فرع التاريخ ولكن بوابة تحافظ حول لهم في حال كنت أدرك أن كنت أخطأت.Reflogs هي وسيلة مريحة لمعرفة ما المدمرة (وغيرها) عمليات أجريت على فرع (أو رئيس) ، مما يجعل من الأسهل إلى التراجع المدمرة العملية.

لذلك علينا أيضا أن إزالة reflogs في الواقع إزالة كل شيء لا يمكن الوصول إليها من فرع.ونحن نفعل ذلك من خلال تنتهي --all reflogs.مرة أخرى بوابة يبقى قليلا من reflogs لحماية المستخدمين لذا علينا مرة أخرى أن أقول ذلك عدم القيام بذلك: --expire-unreachable=now.

منذ أنا أساسا استخدام reflog على التعافي من العمليات التدميرية وعادة ما تستخدم --expire=now بدلا من ذلك الذي ينطلق reflogs تماما.

كان عندي نفس المشكلة لا تزال بعد اتباع كل النصائح في هذا الموضوع:

git reflog expire --expire-unreachable=now --all
git gc --prune=now
git fsck --unreachable --no-reflogs   # no output
git branch -a --contains <commit>     # no output
git show <commit>                     # still shows up

إذا لم يكن reflog و لا فرع ، ...يجب أن يكون علامة!

git tag                             # showed several old tags created before the cleanup

أزلت علامات مع git tag -d <tagname> و عملت تنظيف القديمة يرتكب كانت قد اختفت.

git branch --contains 793db7f272ba4bbdd1e32f14410a52a412667042

ربما يحتاج فقط إلى أن

git branch -a --contains 793db7f272ba4bbdd1e32f14410a52a412667042

أيضا تقرير عن فروع من أجهزة التحكم عن بعد

كان لي مشكلة مماثلة.ركضت git branch --contains <commit>, و عاد لا الإخراج كما في السؤال.

ولكن حتى بعد تشغيل

git reflog expire --expire-unreachable=now --all
git gc --prune=now

بلدي ارتكاب كان لا يزال يمكن الوصول إليها باستخدام git show <commit>.وكان هذا لأن من يرتكب في فصل/تتدلى "فرع" كان معلم.أزلت العلامة ، ركض فوق الأوامر مرة أخرى و كنت الذهبي. git show <commit> عاد fatal: bad object <commit> - بالضبط ما كنت بحاجة.نأمل أن يساعد هذا شخص آخر كان عالقا كما كنت.

git gc --prune=<date> التخلف إلى تقليم الكائنات القديمة من قبل أسبوعين.يمكنك تعيين تاريخ أحدث.ولكن, بوابة الأوامر التي خلق فضفاضة الكائنات عموما سيتم تشغيل بوابة gc-auto (التي الخوخ فضفاضة الكائنات إذا كان عددهم يتجاوز قيمة التكوين متغير gc.السيارات).

هل أنت متأكد من أنك تريد حذف هذه يرتكب?gc.السيارات الإعداد الافتراضي سوف تضمن أن تفقد الأشياء لا تأخذ مبلغ معقول من الذاكرة و تخزين فضفاضة الكائنات لبعض مقدار الوقت عموما فكرة جيدة.بهذه الطريقة, إذا كنت تدرك غدا أن حذف فرع تضمنت ارتكاب كنت في حاجة ، يمكنك استعادتها.

لقد ضرب عن طريق الخطأ في نفس الوضع و عثرت على مخابئ تحتوي على مرجع إلى ما لا يمكن الوصول إليه ارتكابها ، وبالتالي يفترض إليه ارتكاب كان يمكن الوصول إليها من مخابئ.

هذه كانت ما فعلته أن تجعل حقا غير قابلة للوصول.

git stash clear
git reflog expire --expire-unreachable=now --all
git fsck --unreachable
git gc --prune=now
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top