2012-12-11 15 views
5

से प्रतिबद्ध निकालें मैं एक Git इस तरह इतिहास के लिए प्रतिबद्ध है: प्रतिबद्ध U कोएक unreferenced Git भंडार

  U 
     /
A---B---C---D---E master 

कुछ भी नहीं है अंक है, लेकिन मैं अपने हैश पता है। मैं अपनी प्रतिबद्धता से इस प्रतिबद्धता को पूरी तरह से कैसे हटा सकता हूं जैसे कि यह कभी अस्तित्व में नहीं था? मैं इस रेपो का उपयोग कर एकमात्र व्यक्ति हूं।

मैंने git rebase का उपयोग करने का प्रयास किया, लेकिन यह या तो एक शाखा के हिस्सों को हटा सकता है या काम करता है, लेकिन ऐसा लगता है कि एक ही प्रतिबद्धता को हटाने में सक्षम नहीं है।

यदि मैं git checkout <hash> करता हूं और फिर git reset --hard HEAD~1 मुझे अब प्रतिबद्धता दिखाई नहीं दे रही है। क्या यह वास्तव में पूरी तरह से चला गया है या फिर भी यह रेपो में छिपा हुआ है?

उत्तर

2

आखिरकार इसे गिट द्वारा साफ किया जाएगा, लेकिन आप कचरा इकट्ठा करने के लिए वास्तव में git gc देख सकते हैं।

clean कमांड अलग है और यह आपके लिए ख्याल नहीं रखेगा।

+0

क्या होगा अगर मैंने पूरे रेपो को क्लोन किया? क्या अपरिवर्तित कचरा वस्तुओं को भी क्लोन किया जाएगा? – Jawap

+0

@ Waptrick: नहीं, वे क्लोन नहीं किया जाएगा – Chronial

4

के रूप में वर्णित here, बस का उपयोग

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

git reflog expire --expire-unreachable=now --allreflog में पहुंच योग्य नहीं करता की सभी संदर्भों को हटा।

git gc --prune=now खुद को प्रतिबद्ध करता है।

ध्यान: केवल git gc --prune=now का उपयोग करने से काम नहीं करेगा क्योंकि उन कामों को अभी भी रेफ्लॉग में संदर्भित किया गया है। इसलिए, रिफ्लॉग को साफ़ करना अनिवार्य है।

संबंधित मुद्दे