2013-03-15 16 views
18

मैं अभी भी गिट नौसिखिया हूं। मैंने कुछ स्रोत फ़ाइलों को संशोधित किया और प्रतिबद्ध किया। फिर, मैंने git push किया था। लेकिन, मुझे यह त्रुटि मिली।गिट: क्यों "शाखा 'मास्टर मर्ज करें ..."? खींचें और पुश करें

To /foo/bar/ ! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to '/foo/bar/' To prevent you from 
losing history, non-fast-forward updates were rejected Merge the 
remote changes before pushing again. See the 'Note about 
fast-forwards' section of 'git push --help' for details. 

यह अस्वीकार लगता है कि मैं push से पहले git pull नहीं किया। तो, मैंने git pull किया था। ठीक है, दूसरों द्वारा दो संशोधित फाइलें थीं।

फिर, मैं git push सफलतापूर्वक सक्षम था।

प्रश्न: इस मामले में, मैं अपने मूल प्रतिबद्ध संदेश के साथ निम्नलिखित की तरह एक और लॉग दिखाई दे रही है:

commit 59e04ce13b8afa... 
Merge: 64240ba 76008a5 
Author: Jone Doe <[email protected]> 
Date: Fri Mar 15 11:08:55 2013 -0700 

    Merge branch 'master' of /foo/bar/ 

और यह अपने मूल प्रतिबद्ध संदेश है।

commit 64240bafb07705c... 
Author: Jone Doe <[email protected]> 
Date: Fri Mar 15 11:06:18 2013 -0700 

    Fixed bugs and updated! 

मैं समझना चाहता हूं कि क्यों "स्थान की शाखा मास्टर मर्ज करें" जोड़ा गया है।

+0

संभावित डुप्लिकेट [गिट पुल के परिणामस्वरूप "मर्ज शाखा" प्रतिबद्ध लॉग में संदेश] (http://stackoverflow.com/questions/8509396/git-pull-results-in-extraneous-merge-branch-messages-in-commit-log), जिसमें बहुत अधिक विस्तृत उत्तर हैं –

उत्तर

14

जब आपने git-pull किया था, तो दूरस्थ शाखा से संशोधनों को आपकी स्थानीय शाखा में विलय कर दिया गया था। स्वचालित रूप से जेनरेट की गई प्रतिबद्धता उसको इंगित करती है।

विलय के परिणामस्वरूप विवाद हो सकता है, जिसे मैन्युअल रूप से हल करने की आवश्यकता होगी। आपके विशेष मामले में, ऐसा नहीं हुआ और गिट सबकुछ का ख्याल रख सकता था। और फिर git push;

+0

है ऐसी अतिरिक्त प्रतिबद्धता से बचने का कोई तरीका है? उदाहरण के लिए वर्तमान प्रतिबद्धता में विलय संशोधन (* फिक्स्ड बग और अपडेटेड! * ऊपर) सहित? क्योंकि यह लॉग इतिहास को प्रदूषित करता है। – Kalvn

+3

गिट एक फास्ट-फॉरवर्ड विलय करने का प्रयास करेगा यदि रिमोट शाखा स्थानीय शाखा से आगे है, यानी, दूरस्थ शाखा कुछ स्थानीय शाखा के कामकाज के शीर्ष पर है। इस मामले में कोई अतिरिक्त प्रतिबद्धता नहीं है। अतिरिक्त प्रतिबद्धता तब दिखाई देती है जब दोनों शाखाओं के इतिहास अलग हो जाते हैं। ऐसे मामले में आप 'गिट रीबेज' या 'गिट पुल - रेबेस' का उपयोग करके अपनी स्थानीय शाखा के प्रतिबद्ध इतिहास को फिर से लिख सकते हैं, जो एक फास्ट-फॉरवर्ड विलय कर रहा है। रीबेजिंग के अपने डाउनसाइड्स हैं हालांकि अतिरिक्त मर्ज कमेट्स हमेशा खराब नहीं होते हैं - वे सिर्फ विकास के पाठ्यक्रम को रिकॉर्ड कर रहे हैं। –

+0

स्पष्टीकरण के लिए धन्यवाद :) – Kalvn

7

अगर वहाँ दूसरों के द्वारा परिवर्तन हो सकता है, यह एक git pull --rebase (इस संघर्ष हो सकता है आप को हल करना होगा यानी, आपके नए परिवर्तनों दूरदराज के परिवर्तन के बाद जोड़ने) करने के लिए एक अच्छा विचार हो सकता परिणाम। सावधान रहें, इससे पहले की नई चीजें पैदा होती हैं जो पहले कभी मौजूद नहीं थीं (जैसा कि कोई इतिहास पुनर्लेखन करता है), लेकिन यह एक साफ, रैखिक इतिहास (विलय का कोई उलझन नहीं)

संबंधित मुद्दे