जो मैं देख सकता हूं उसका मुख्य कारण इस प्रकार है:
- वर्तमान में (अक्टूबर 2015) के विलय के अनुरोध के लिए GitHub UI आपको प्रतिबद्ध संदेश की पहली पंक्ति को संपादित करने की अनुमति नहीं देता है, यह होने के लिए मजबूर करता है
Merge pull request #123 from joebloggs/fix-snafoo
- प्रतिबद्ध ब्राउज़िंग इतिहास के लिए GitHub यूआई वर्तमान में आपको शाखा के इतिहास को देखने की अनुमति नहीं है
--first-parent
दृष्टि
- किसी फ़ाइल पर दोष देखने के लिए GitHub UI वर्तमान में आपको फ़ाइल के दोष को देखने की दृष्टि से अनुमति नहीं देता है
--first-parent
(ध्यान दें कि यह केवल Git 2.6.2 में तय किया गया था, इसलिए हम GitHub को उसके बिना होने के लिए क्षमा कर सकते हैं उपलब्ध)
इसलिए जब आप इन तीनों स्थितियों को ऊपर से जोड़ते हैं, तो आपको एक ऐसी स्थिति मिलती है, जिसमें अनचाहे कमिट्स को GitHub UI से बदसूरत रूप में मिला दिया जाता है।
स्क्वैश किए गए कमिट्स के साथ आपका इतिहास कुछ ऐसा दिखाई देगा
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... Hotfix for android display issue
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... Implemented pop-up to select language
जबकि बिना स्क्वैश किए इतिहास में कुछ ऐसा दिखेगा
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... hotfix for #5849564648
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
जब आप एक पीआर अनुरेखण में बहुत कमिट करते हैं, जहां एक बदलाव आया है, तो एक बुरा सपना बन सकता है यदि आप खुद को GitHub UI का उपयोग करने के लिए प्रतिबंधित करते हैं ।
उदाहरण के लिए, आप एक अशक्त सूचक को किसी फ़ाइल में कहीं डि-रेफर किया जा रहा है ... तो आप कहते हैं "यह किसने किया, और कब? क्या रिलीज़ संस्करण प्रभावित हुए?"। फिर आप गिटहब यूआई में दोष देखने के लिए घूमते हैं और आप देखते हैं कि लाइन को बदल दिया गया था789fdfffdf
... "ओह, लेकिन एक सेकंड रुको, यह लाइन बस अपने इंडेंट को बाकी कोड के साथ फिट करने के लिए बदल गई थी", इसलिए अब आपको पेरेंट कमिट में उस फाइल के लिए ट्री स्टेट पर नेविगेट करना होगा और री-विजिट करना होगा दोष पृष्ठ ... अंतत: आपको कमिटमेंट मिल जाता है ... यह 6 महीने पहले का एक कमिटमेंट है ... "ओह **** यह 6 महीने के लिए यूजर्स को प्रभावित कर सकता है" आप कहते हैं ... आह लेकिन रुको, वह कमिट वास्तव में एक पुल अनुरोध में था और केवल कल विलय कर दिया गया था और किसी ने भी अभी तक कोई कटौती नहीं की है ... "धिक्कार है कि आप लोगों को इतिहास को बिना बताए विलय करने के लिए" यह रोना है जो आमतौर पर लगभग 2 या 3 कोड पुरातत्व अभियानों के माध्यम से सुना जा सकता है GitHub UI
अब हम विचार करें कि यदि आप Git कमांड लाइन का उपयोग कैसे करते हैं (और सुपर-भयानक 2.6.2 जिसके लिए फिक्स है git blame --first-parent
)
- यदि आप Git कमांड लाइन का उपयोग कर रहे हैं, तो आप मर्ज कमिट मैसेज को पूरी तरह से नियंत्रित करने में सक्षम होंगे और इस प्रकार मर्ज कमिट अच्छी सारांश रेखा हो सकती है।
तो हमारा प्रतिबद्ध इतिहास जैसा दिखेगा
$ git log
1256556316... #423 Added new slideshow feature
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... #324 Hotfix for android display issue
787g8fgf78... hotfix for #5849564648
f56556316e... #28 Implemented pop-up to select language
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
लेकिन हम भी कर सकते हैं
$ git log --first-parent
1256556316... #423 Added new slideshow feature
56556316ad... #324 Hotfix for android display issue
f56556316e... #28 Implemented pop-up to select language
(दूसरे शब्दों में: Git CLI से आप अपना केक बना सकते हैं और इसे खा भी सकते हैं)
अब जब हम अशक्त पॉइंटर मुद्दे को हिट करते हैं ... अच्छी तरह से हम सिर्फ उपयोग करते हैं git blame --first-parent -w dodgy-file.c
और हमें तुरंत सटीक प्रतिबद्ध दिया जाता है जहां सरल व्हाट्सएप परिवर्तनों को नजरअंदाज करते हुए मास्टर शाखा को अशक्त सूचक डी-संदर्भ पेश किया गया था।
बेशक अगर आप GitHub UI का उपयोग करके मर्ज कर रहे हैं तो GitHub के git log --first-parent
लिए वास्तव में भद्दा धन्यवाद है जो मर्ज कमिट मैसेज की पहली पंक्ति को मजबूर करता है:
1256556316... Merge pull request #423 from jrandom/add-slideshows
56556316ad... Merge pull request #324 from ahacker/fix-android-display
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
तो एक लंबी कहानी को छोटा करने के लिए:
गीथहब यूआई (अक्टूबर 2015) में कई कमियां हैं कि यह कैसे अनुरोधों को मर्ज करता है, यह प्रतिबद्ध इतिहास को कैसे प्रस्तुत करता है और यह कैसे जानकारी को दोष देता है। GitHub UI में इन दोषों के आसपास हैक करने का वर्तमान सबसे अच्छा तरीका है कि लोग विलय से पहले अपने कमिट्स को स्क्वैश करने का अनुरोध करें।
Git CLI में ये समस्याएँ नहीं हैं और आप आसानी से यह चुन सकते हैं कि आप कौन सा दृश्य देखना चाहते हैं ताकि आप दोनों इस कारण का पता लगा सकें कि इस तरह से एक विशेष परिवर्तन क्यों किया गया था (निर्विवाद कमिट के इतिहास को देखते हुए) प्रभावी ढंग से स्क्वैस्ड कमिट देखें।
परिशिष्ट भाग
अंतिम कारण अक्सर स्क्वाशिंग के लिए उद्धृत किया जाता है, बैकपोर्टिंग को आसान बनाने के लिए ... यदि आपके पास केवल एक पोर्ट टू बैक पोर्ट (यानी स्क्वैस्ड कमिट) है तो चेरी पिक करना आसान है ...
वैसे अगर आप git के इतिहास को देख रहे हैं, git log --first-parent
तो आप केवल मर्ज कमिट्स को चुन सकते हैं। अधिकांश लोग भ्रमित हो जाते हैं चेरी लेने मर्ज शुरू हो जाता है क्योंकि आपको -m N
विकल्प निर्दिष्ट करना पड़ता है लेकिन अगर आपको यह कमिट मिला है git log --first-parent
तो आप जानते हैं कि यह पहला अभिभावक है जिसे आप अनुसरण करना चाहते हैं।git cherry-pick -m 1 ...