एक मर्ज के माता-पिता को git में कैसे प्राप्त करें?


140

कुछ गिट कमांड माता-पिता को संशोधन के रूप में लेते हैं; अन्य (जैसे कि git revert), एक मूल संख्या के रूप में। माता-पिता दोनों मामलों के लिए कैसे प्राप्त करें। मैं ग्राफ़िकल लॉग कमांड का उपयोग नहीं करना चाहता क्योंकि अक्सर दूसरे माता-पिता को खोजने के लिए एक लंबे पेड़ को नीचे स्क्रॉल करना पड़ता है।

जवाबों:


179

git log <hash>मर्ज कमिट के लिए बुलाए गए सरल अपने माता-पिता की संक्षिप्त हैश दिखाता है:

 $ git log -1 395f65d
 commit 395f65d438b13fb1fded88a330dc06c3b0951046
 Merge: 9901923 d28790d
 ...

git माता-पिता को उनकी संख्या के अनुसार आउटपुट: पहला (सबसे बाएं) हैश पहले माता-पिता के लिए है, और इसी तरह।

यदि आप चाहते हैं कि सिर्फ हैश हो, दो समान विकल्प हैं:

$ git log --pretty=%P -n 1 <commit>
$ git show -s --pretty=%P <commit>

git rev-list माता-पिता के हैश को भी दिखा सकता है, हालांकि यह पहली बार एक प्रतिबद्ध के लिए हैश की सूची देगा:

$ git rev-list --parents -n 1 <commit>

आप माता-पिता की जांच करना चाहते हैं, तो आप के रूप में कैरेट के साथ सीधे उन्हें का उल्लेख कर सकते <commit>^1हैं और <commit>^2:, जैसे

git show <commit>^1

यह सामान्यीकरण करता है; एक ऑक्टोपस मर्ज के लिए आप n वें माता-पिता को संदर्भित कर सकते हैं <commit>^n। आप सभी माता-पिता के साथ उल्लेख कर सकते हैं <commit>^@, हालांकि यह तब काम नहीं करता है जब किसी एकल प्रतिबद्ध की आवश्यकता होती है। अतिरिक्त प्रत्यय n प्रदर्शित हो सकती है वें माता पिता वाक्य रचना (जैसे <commit>^2^, <commit>^2^@,), जबकि वे नहीं कर सकते के बाद ^@( <commit>^@^मान्य नहीं है)। इस सिंटैक्स पर अधिक जानकारी के लिए, rev-parseमैन पेज पढ़ें ।


1
मेरे स्वयं के प्रश्न का उत्तर देते हुए: 'git rev-list --parents -n 1 <somehash>' के परिणाम हैं: <somehash> <parent1> <parent2>। यानी, माता-पिता एक नंबर के हैं।
मिकमेकाना

आप git- माता-पिता github.com/danielribeiro/dotfiles/blob/master/bin/git-parents का भी उपयोग कर सकते हैं । बस इसे अपने पेट में डालें और $ git माता-पिता को बुलाएं <प्रतिबद्ध> (<प्रतिबद्ध> डिफॉल्ट्स टू हेड)
डैनियल रिबेरो

@ जेफ्रोमी, मैं वास्तव में चाहता हूं कि "यह भी ध्यान दें कि सामान्य लॉग आउटपुट दिखाता है ..." भाग आपके उत्तर के शीर्ष पर होगा। :)
एडम मोंसेन

3
git logऔर git showकेवल एक माता-पिता होने पर बहुत अलग चीजों का उत्पादन करते हैं। git logयदि आप एकरूपता चाहते हैं तो प्राथमिकता दें।
नोएल याप

यह उत्तर मेरे उबंटू मशीन पर काम नहीं करता है git (v2.17.1)। मुझे आउटपुट Mergeमें फाइल नहीं दिख रही git log -1है।
मेजा

29

एक मर्ज के माता-पिता को देखने का सबसे सरल तरीका निम्नलिखित है

git show --pretty=raw 3706454

14
git cat-file -p 3706454 वही है, लेकिन इससे भी छोटा है :)
सबजेन्टन

1
ये दोनों बहुत उपयोगी हैं!
टेकनटूल

एक अन्य विकल्पgit log --pretty=raw -1 3706454
सेलेरर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.