2011-05-07 12 views
8

गिट शाखा के प्रमुख और टैग पॉइंटर्स हैं, और इन पॉइंटर्स या तो अंतर्निहित रूप से स्थानांतरित हो सकते हैं (commit के बाद) या स्पष्ट रूप से (branch -m के बाद)।क्या शाखा प्रमुखों का गिट रिकॉर्ड इतिहास है?

क्या गिट इन पॉइंटर्स की स्थिति का इतिहास रिकॉर्ड करता है?

  • रेपो के राज्य को देखने के लिए दो दिन पहले, सहित जहां शाखा सिर कहा:

    मैं इसके लिए कम से कम दो कारण देखें।

  • यह सुनिश्चित करने के लिए कि कोई इतिहास खो गया है क्योंकि किसी ने शाखा के सिर को इस तरह से स्थानांतरित किया है कि कुछ काम नहीं कर पाएंगे।

ध्यान दें कि उपरोक्त मेर्कुरियल में संभव है क्योंकि यह प्रत्येक प्रतिबद्धता में शाखा का नाम संग्रहीत करता है।

तो फिर, गिट में .git/refs/version नियंत्रित की सामग्री है, या क्या उन्हें ऐसा करने का कोई तरीका है?

(मैं एक टीम के लिए मर्कुरियल या गिट पर निर्णय लेने की कोशिश कर रहा हूं, और मैं यह सुनिश्चित करना चाहता हूं कि साझा रेपो में सभी बदलावों को रेफरी समेत रिकॉर्ड किया गया हो। मुझे कोई परवाह नहीं है कि डेवलपर्स अपने निजी repos।)

धन्यवाद।

उत्तर

7

वे संस्करण नहीं हैं, लेकिन reflog सुविधा एक स्थानीय इतिहास रखता है जिसे आप गलतियों को पूर्ववत करने के लिए उपयोग कर सकते हैं। हालांकि, अगर कोई अंत में कुछ काम करने के लिए किसी शाखा प्रमुख को "रिवाइंड" करता है, तो यह तुरंत स्पष्ट हो जाएगा जब कोई अन्य डेवलपर उस शाखा के चेकआउट को अपडेट करने का प्रयास करता है, क्योंकि गिट स्थानीय रूप से उस परिवर्तन को तब तक अस्वीकार कर देगा जब तक --force का उपयोग नहीं किया जाता है। आप आसानी से उस बिंदु पर साझा भंडार में वापस आने के लिए धक्का दे सकते हैं।

+1

नोट आप भी 'receive.denyNonFastForwards की स्थापना करके rewinds रोका जा सकता है कॉन्फ़िगरेशन सेटिंग –

+0

आपके उत्तर ने मुझे बड़ा समय बचाया। आप के लिए एक बड़ा +200! –

1

गेरिट जैसे एंटरप्राइज़ गिट सर्वर के एक्सटेंशन हैं जो आपके शाखा इतिहास का संस्करण करेंगे। यदि कोई शाखा किसी नॉन फास्ट फॉरवर्ड तरीके से हटा दी जाती है या अपडेट हो जाती है (पुश-एफ) यह पिछले संस्करण को एक विशेष रेफरी के तहत वापस कर देगा ताकि जरूरत पड़ने पर उन्हें बहाल किया जा सके और कचरा संग्रह द्वारा नहीं छोड़ा जाएगा। कानूनी कारणों से आवश्यक होने पर गेरिट प्रशासक अभी भी चयनित कामों को हटा सकते हैं।

git reflog 

और:

0

वहाँ दो तरीके हैं

git log -g 

पहले मामले के साथ समतुल्य:

git log --oneline -g 
संबंधित मुद्दे