चीजें, जैसा कि आप नोट करते हैं, गिट में इतना आसान नहीं हैं। विशेष रूप से, "पहले" और "बाद" की परिभाषा को थोड़ा और स्पष्टीकरण की आवश्यकता होती है।
यदि आप अपने भंडार में आने वाले लोगों पर भरोसा करते हैं तो टाइमस्टैम्प के साथ गड़बड़ न करें, और आप पहले से ही जानते हैं कि दोनों काम एक ही शाखा में हैं, तो आप काम के टाइमस्टैम्प की तुलना कर सकते हैं और देख सकते हैं कि पहले कौन सा है। प्रत्येक प्रतिबद्धता के लिए निम्न आदेश का प्रयोग करें, और परिणाम की तुलना करें।
git log -1 --format='%ci' <commit>
Git के साथ
यह आवश्यक नहीं, timestamps भरोसा नहीं कर सकते, फिर भी विपरीत सबवर्सन उनके उत्पादन की एक नौकरी के साथ एक केंद्रीय भंडार नहीं है, क्योंकि। आप यह भी सुनिश्चित नहीं कर सकते कि दो काम एक ही शाखा पर हैं (हालांकि समस्या भी सबवर्जन के साथ मौजूद है)।
उन समस्याओं से बचने के लिए, इस बारे में बात करें कि कोई प्रतिबद्धता किसी अन्य का पूर्वज है या नहीं, इसके पहले या उसके बाद आता है।निम्नलिखित प्रतिबद्ध ग्राफ में, बी और सी, ए के पूर्वजों हैं, जबकि बी सी के एक पूर्वज है और न ही इसके विपरीत नहीं है:
B (master)
| C (branch)
|/
A (root)
यह निर्धारित करने के लिए प्रतिबद्ध एक बी, निम्न आदेश का उपयोग के एक पूर्वज है (करने के लिए an article at git ready के आधार पर):
git rev-list <commitA> | grep $(git rev-parse <commitB>)
पहले भाग सूचियों सभी करता है कि एक प्रतिबद्ध के पूर्वजों कर रहे हैं; दूसरा भाग प्रतिबद्ध बी के पूर्ण हैश प्राप्त करता है, फिर उस प्रतिबद्धता के लिए पूर्वजों की सूची की खोज करता है। यदि आप कोई आउटपुट देखते हैं, तो प्रतिबद्ध ए प्रतिबद्धता बी का पूर्वज है। अगर प्रतिबद्धता ए प्रतिबद्धता बी के पूर्वजों है तो कार्य करने के लिए तर्कों को स्वैप करें।
यह दूसरा रूप धीमा है, लेकिन आपको पूर्ण निश्चितता देता है कि एक प्रतिबद्धता दूसरे का पूर्वज होता है।
तो क्या टाइमस्टैम्प का प्रतिनिधित्व करता है जब मैं Git लॉग करना -1 --format = '% ci'? मैं बस एक परिदृश्य को समझने की कोशिश कर रहा हूं जब मैं टाइमस्टैम्प पर भरोसा नहीं कर सकता। –
Glide
@ ग्लाइड: वह टाइमस्टैम्प प्रतिबद्धता के समय का प्रतिनिधित्व करता है। हालांकि, क्योंकि शुरुआत शुरुआत में डेवलपर के स्थानीय भंडार पर की जाती है, अगर उनके कंप्यूटर पर घड़ी गलत है, या वे 'GIT_COMMITTER_DATE' के साथ खेलने की तरह एक चाल का उपयोग करते हैं, तो टाइमस्टैम्प गलत हो सकता है। –
हे, कमांड काम करता है लेकिन आपने यह कैसे कहा है कि यह कैसे काम करता है गलत है। गिट रेव-लिस्ट कमांड वास्तव में यह निर्धारित करता है कि प्रतिबद्ध बी प्रतिबद्धता ए का पूर्वज है या नहीं। आप कहते हैं कि "पहला भाग सभी प्रतिबद्धताओं को सूचीबद्ध करता है जो प्रतिबद्धता ए के पूर्वजों हैं"। जो कुछ स्पष्ट रूप से करता है, मैंने अभी कुछ परीक्षण किए हैं। इसलिए यदि आप SHA प्रतिबद्धता के लिए उस सूची के माध्यम से grepping कर रहे हैं, तो grep सफलता होगा IFF प्रतिबद्ध बी उस पूर्वजों की सूची में है, यानी प्रतिबद्धता ए के पूर्वजों - जो आपने लिखा है उसके विपरीत। – eeeeaaii