अतीत में कई बार, हमें एक समस्या है जहां डेवलपर्स (या तो स्पष्ट रूप से या प्रभावी रूप से) git merge -s ours
करते हैं, जब उनके पास नहीं होना चाहिए, खो गया है और सफाई के बाद हमें यह पता चला है अधिक जटिल और समय लेने वाला। टेस्ट विफल नहीं हुए क्योंकि परीक्षणों को जोड़ने वाले बहुत ही कामों को चुपचाप उनके द्वारा परीक्षण किए जा रहे कोड के साथ वापस कर दिया गया था।ग़लत 'गिट मर्ज-एस हमारा' पता लगाने के लिए मैं विलय को सारांशित कैसे कर सकता हूं?
क्या मैं, लगता है या एक उपकरण है जो किसी मर्ज को सारांशित बनाने है करना चाहते हैं एक सामान्य मर्ज के साथ निम्नलिखित की तरह एक निर्गम कुछ का निर्माण: जहां एक मर्ज को गलत तरीके से किया गया था
Lines Left(2b3c4d) Right(3c4d5e)
Common with base 970 930
Unique wrt base 20 50
Unique wrt other 15 45
Unique wrt merge 15 45
Common with merge 995 985
लेकिन मामले में , कई बदलाव बाहर पूर्ववत करने, या जहां एक git merge -s ours
प्रदर्शन किया गया था, ऐसा लगता है एक रिपोर्ट कुछ में परिणाम हो सकता है:
Lines Left(2b3c4d) Right(3c4d5e)
Common with base 970 930
Unique wrt base 20 50
Unique wrt other 15 45
Unique wrt merge 15 0 !!
Common with merge 990 935
Warning: 100% of changes from 3c4d5e are missing from merge commit!
यदि यह रिपोर्ट उन सभी के लिए प्रतिबद्ध के लिए चलाए गए, हम झंडा ऊपर (एक जेनकींस काम के माध्यम से) कर सकता है जब भी एक विलय थोड़ा सा था पर smelly पक्ष पर।
अब तक मैं git diff --stat
, git diff --name-status
और git diff --summary
के साथ खेल रहा हूं लेकिन अब तक मुझे कोई भी चीज़ नहीं है जो मैं चाहता हूं।
सबसे अच्छा मैं अब तक क्या कर सकते हैं एक सामान्य मर्ज के लिए निम्नलिखित की तरह कुछ में परिणाम होगा:
base..left base..right left..merge right..merge
f67c4..a9eb4 f67c4..5b592 a9eb4..cb209 5b592..cb209
a | 1 + 1 +
b | 1 + 1 +
base | 1 + 1 + 1 + 1 +
changed 2 2 2 2
insertions(+) 2 2 2 2
deletions(-) 0 0 0 0
और एक ours
मर्ज के लिए:
base..left base..right left..merge right..merge
f67c4..a9eb4 f67c4..5b592 a9eb4..95637 5b592..95637
a | 1 + 1 -
b | 1 + 1 +
base | 1 + 1 + 2 +-
changed 2 2 0 3
insertions(+) 2 2 0 2
deletions(-) 0 0 0 2
ध्यान दें कि मैं न केवल कर -s ours
विलय का पता लगाना चाहते हैं, मैं भी स्थिति को पकड़ना चाहता हूं जहां कुछ लेकिन परिणामस्वरूप विलय में सभी बदलाव नहीं हैं। यह खोने परिवर्तनों के एक विशिष्ट कारण की जांच करने के बजाय गलत विलय का पता लगाने का एक और सामान्य मामला है।
इसके अलावा, ऐसा लगता है कि विलय में संघर्ष होने पर ऐसा ही होता है, इसलिए किसी भी विधि को विलय को स्वचालित रूप से चलाने की आवश्यकता होती है, उसे स्वचालित रूप से उन संघर्षों को भी हल करने की आवश्यकता होगी।
आखिरकार, मैं अपने सारांशों को पहले बिना छेड़छाड़ किए बिना, इस सारांश उपयोग को गंदे रेपो पर चलाने में सक्षम होना चाहता हूं, इसलिए git diff
के साथ मेरे वर्तमान प्रयोग।
इस तरह की जानकारी के बारे में कोई सुझाव है कि मैं इस तरह की जानकारी पर सीधे पार्सिंग और रीफॉर्मेटिंग के साथ एक स्क्रिप्ट से अधिक कैसे प्राप्त कर सकता हूं।
मुझे सबसे नज़दीकी मौजूदा प्रश्न मिल सकते हैं: Detect a merge made by '-s ours' (लेकिन एकमात्र उत्तर वहां मदद नहीं करता है) और “git merge -s ours” and how to show difference (लेकिन वहां कोई जवाब नहीं है)।
'हमारा हमारा विलय' का पता लगाने का एक आसान तरीका विलय प्रतिबद्धता के दोनों माता-पिता के खिलाफ एक अंतर चलाना है। यदि एक अंतर ** खाली ** है, और माता-पिता अन्यथा अलग हैं, तो यह एक निश्चित संकेत है कि 'हमारा हमारा' (या समकक्ष) किया गया था। उदाहरण के लिए, आप '$ (गिट शो --pretty =% पी $ प्रतिबद्ध) पर लूप कर सकते हैं और चेतावनी दे सकते हैं 'अगर! गिट diff -s --exit-code $ parent .. $ commit'। – user4815162342
मर्ज आईएमओ में क्या हुआ यह देखने का सबसे अच्छा तरीका है कि विलय को फिर से करें, फिर वास्तविक विलय के साथ परिणाम को अलग करें। तो 'गिट चेकआउट; गिट मर्ज ; गिट diff ' –
धन्यवाद @ user4815162342, यह काफी है जो मैं ऊपर कर रहा हूं, 'आधार .. बाएं',' बेस..राइट ',' बाएं..मर्ज 'और '' git diff --stat'' का उपयोग करके right..merge'। इसके अलावा, मैं एक '-s ours' विलय बीटीडब्ल्यू नहीं मानना चाहता, मैं भी स्थिति को पकड़ना चाहता हूं जहां कुछ लेकिन परिणामस्वरूप विलय में सभी बदलाव नहीं हैं। मैंने दोनों प्रश्नों को और स्पष्ट करने के लिए अपना प्रश्न अपडेट कर लिया है। –