मुझे "गिट ऐड, गिट कमिट" से पहले या बाद में "गिट पुल" करने की आवश्यकता है?


93

सही तरीका क्या है?

git add foo.js
git commit foo.js -m "commit"
git pull
git push

या

git pull
git add foo.js
git commit foo.js -m "commit"
git push

या

git add foo.js
git pull
git commit foo.js -m "commit"
git push

युपीडी:

मैं यह उल्लेख करना भूल गया कि इस मामले में मैं git addएक ट्रैक की गई और संशोधित फ़ाइल का उपयोग करता हूं । रिपॉजिटरी के लिए एक नई फ़ाइल शामिल करने के लिए नहीं। क्या यह आदेशों का क्रम बदलता है?


संबंधित प्रश्न: stackoverflow.com/questions/813822/…
leo9r

जवाबों:


95

मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका है:

अपने स्थानीय परिवर्तनों को रोकें:

git stash

शाखा को नवीनतम कोड में अपडेट करें

git pull

अपने स्थानीय परिवर्तनों को नवीनतम कोड में मिलाएं:

git stash apply

अपने परिवर्तनों को जोड़ें, कमिट करें और धक्का दें

git add
git commit
git push

मेरे अनुभव में यह गिट के साथ कम से कम प्रतिरोध का रास्ता है (वैसे भी कमांड लाइन पर)।


4
क्या आप बता सकते हैं कि यह बेहतर क्यों है? इससे क्या समस्या होती है? विशेष रूप से, यह एक साधारण प्रतिबद्ध> पुल> पुश से बेहतर क्यों है? (मुझे लगता है कि यह सबसे अच्छा जवाब हो सकता है, लेकिन अभी पर्याप्त जानकारी नहीं है, यहां तक ​​कि एक अच्छा जवाब माना जा सकता है।)
dallin

7
शायद यह बहुत ही महत्वपूर्ण था, लेकिन मुझे हमेशा यह दृष्टिकोण मिला (कमांड लाइन पर, सोरसेट्री जैसी चीज़ के बजाय) बहुत आसान। एक कमिट करना, और फिर खींचना, एक बड़ी टीम में काम करते हुए, हमेशा बड़े मर्ज संघर्ष के लिए नेतृत्व करते हैं क्योंकि गिट एक आवक के साथ मेरे परिवर्तनों को एक फ़ाइल में विलय करने में बहुत अच्छा नहीं था। स्ट्रैस करके, इसने मुझे नए बदलावों को खींचने की अनुमति दी और फिर अपने परिवर्तनों को जोड़ने के लिए आधार के रूप में अपडेटेड कोड का उपयोग किया। संघर्षों से निपटना आसान था क्योंकि वे मेरे लिए स्पष्ट थे (जैसा कि मेरे परिवर्तन अब संघर्ष थे)। दृष्टिहीनता में, हो सकता है कि यह मेरी स्थिति के लिए आसान था।
जोंजो

1
तो ऐसा लगता है कि "आप हाथी को कैसे खाते हैं? एक समय में एक काटता है"। यानी विलय को सरल बनाने के लिए प्रक्रिया को कुछ और चरणों में तोड़कर कम और संभवत: स्पष्ट बदलाव लाने के लिए। समझ में आता है।
dallin

क्या यहाँ git जोड़ना आवश्यक है? यदि सभी फाइलें पहले से ही स्टेजिंग में जोड़ी जाती हैं!
शार्प एज

यदि आप उपयोग नहीं कर रहे हैं तो क्या होगा git stash?
एरोन फ्रेंके

76

खींच = लाना + मर्ज।

विलय से पहले आपने जो किया है, उसे करने की जरूरत है।

इसलिए कमिट के बाद खींचिए।


8
क्या इसका मतलब यह होगा कि आप अपने द्वारा किए गए प्रत्येक भुगतान के लिए एक अतिरिक्त प्रतिबद्ध बनाने और रेपो को मैला कर देंगे? इसके अलावा आपका प्रारंभिक प्रतिबद्ध संदेश हर बार मर्ज टिप्पणी के बाद समाप्त होता है। यदि ऐसा है तो मैं @johnjo द्वारा नीचे बताए गए स्टैश विधि का उपयोग करने के लिए इच्छुक हूं।
सोमवारपावर

3
@ डैनियलएम हां, मर्ज के लिए एक अतिरिक्त प्रतिबद्ध है (स्पष्ट डिफ़ॉल्ट प्रतिबद्ध संदेश के साथ)। यह काफी अच्छी बात है, क्योंकि यह आपको अपनी अंतिम प्रतिबद्धता या अपने सहयोगी की अंतिम प्रतिबद्धता या मर्ज कमिटमेंट की जांच करने की अनुमति देता है। यदि आप इसे टालना चाहते हैं और यदि आप अपने साथियों के आने के बाद अपने कमिट्स रखना चाहते हैं, तो आप rebaseइसके बजाय कर सकते हैं merge। आप इसे git commit && git rebaseया तो कर सकते हैं git pull --rebase
अरनॉड डेनॉयले

टिप के लिए धन्यवाद, @ अरनौद। कई अलग-अलग SO प्रश्नों को पढ़ने के बाद, इस टिप्पणी ने इसे बनाया। मेरे पसंदीदा विकल्प जब सहकर्मी विभिन्न फ़ाइलों पर काम कर रहे हैं git pull, तो मेरे परिवर्तनों का मंचन करने के बाद, क्योंकि मुझे यह सबसे स्वाभाविक लगता है। हालांकि मुझे एहसास है कि कई अलग-अलग वर्कफ़्लोज़ काम करते हैं (स्टैश भी अच्छा है), इसलिए यह शायद स्वाद का मामला है।
भतीजे

51

मैं सुझाव देता हूं कि बड़े विलय और संभावित संघर्षों को कम करने के लिए दूरस्थ शाखा से जितनी बार संभव हो सके उतनी खींचतान की जाए।

ऐसा कहने के बाद, मैं पहले विकल्प के साथ जाऊंगा:

git add foo.js
git commit foo.js -m "commit"
git pull
git push

खींचने से पहले अपने बदलाव करें ताकि पुल के दौरान आपके बदलाव दूरस्थ परिवर्तनों के साथ मिल जाएँ। इसके परिणामस्वरूप संघर्ष हो सकता है जिसे आप यह जानकर निपटना शुरू कर सकते हैं कि आपका कोड पहले से ही प्रतिबद्ध है कुछ भी गलत हो सकता है और आपको जो भी कारण के लिए मर्ज को रद्द करना होगा।

मुझे यकीन है कि कोई मेरे साथ असहमत होगा, मुझे नहीं लगता कि इस मर्ज प्रवाह को करने का कोई सही तरीका है, केवल वही जो लोगों के लिए सबसे अच्छा काम करता है।


1
क्या आप कृपया प्रश्न के लिए मेरा अपडेट देख सकते हैं? मैं यह बताना भूल गया कि git addमेरे उदाहरण में वास्तव में किस चीज़ का उपयोग किया गया है।
ग्रीन

1
इससे कोई फ़र्क नहीं पड़ना चाहिए कि क्या यह एक नई फ़ाइल थी या एक ट्रैक / संशोधित फ़ाइल थी। फिर भी प्रतिबद्ध है और फिर खींचो।
जसारीन

7

मुझे लगता git pull --rebaseहै कि आपके स्थानीय स्तर पर हाल ही में आने वाले सबसे कम्यूट को सेट करने का सबसे साफ तरीका है, जो आपके पास एक निश्चित बिंदु पर नहीं है।

तो इस तरह आपको हर बार जब आप बदलाव शुरू करना चाहते हैं, तो आपको खींचने की जरूरत नहीं है।


यह वही है जो मैं भी करता हूं, लेकिन सिर्फ यह बताने के लिए कि इस पर विचार के दो मुख्य स्कूल निश्चित रूप से हैं (चारों ओर केंद्रित है कि क्या यह व्यक्तिगत कमिट्स में संघर्ष को ठीक करने के लिए सबसे अच्छा है, या एक बार मर्ज कमिट में) लिनुस के साथ मर्ज शिविर में । शुक्र है कि इस उपकरण का खुद ही मत बन गया है, इसलिए इसका उपयोग करें लेकिन यह आपके और आपकी परियोजना की जरूरतों के लिए सबसे अच्छा काम करता है :-)
ल्यूक उशेरवुड

3

आप चाहते हैं कि आपका परिवर्तन दूरस्थ शाखा की वर्तमान स्थिति के शीर्ष पर बैठे। इसलिए शायद आप खुद को कमिटेड करना चाहते हैं। उसके बाद, अपने परिवर्तनों को फिर से धक्का दें।

"गंदा" स्थानीय फाइलें तब तक कोई समस्या नहीं हैं जब तक कि दूरस्थ शाखा के साथ कोई टकराव न हो। यदि संघर्ष होते हैं, तो मर्ज विफल हो जाएगा, इसलिए स्थानीय परिवर्तन करने से पहले खींचने में कोई जोखिम या खतरा नहीं है।


1
काम नहीं करेगा, जैसा कि अरनॉड ने उल्लेख किया है, खींचने के लिए आवश्यक है कि आप पहले अपने बदलाव करें।
जसारेन

मेरा गिट बहुत सारे स्थानीय परिवर्तनों के साथ खुश है। बेशक, यदि दूरस्थ शाखा पर एक ही फाइलें बदली जाती हैं, तो पुल का मर्ज भाग विफल हो जाता है। एक उचित मर्ज संघर्ष बनाने के लिए, मुझे पहले, सुनिश्चित करना होगा। इसलिए, अगर स्थानीय और दूरस्थ रूप से बदली गई फाइलों का सेट निराशाजनक है, तो खींचना और फिर कमिट करना ठीक है। अन्यथा, गिट पुल नहीं करेगा। कोशिश करने से कोई नुकसान नहीं।
अलेक्सई

यह मेरा पसंदीदा विकल्प है जब लोग विभिन्न फाइलों पर काम कर रहे हैं, और मुझे यह सबसे स्वाभाविक लगता है।
भतीजे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.