चेकआउट के बिना खींचतान?


133

मैं जिस शाखा पर काम कर रहा हूं, उसके भीतर से मुझे git पुल और अन्य कमांड चलाने की आदत है। लेकिन मैंने एक विकास सर्वर स्थापित किया है, जिस पर कई लोग काम करते हैं, इसलिए जब मैं ऐसा करता हूं तो मुझे शाखाएं बदलनी नहीं चाहिए। अगर मैं जीथब रिपॉजिटरी से देव सर्वर पर एक मौजूदा शाखा को अपडेट करना चाहता हूं, तो हम इसका उपयोग करने का सही तरीका क्या होगा? अगर मैं 'git pull github branchname' कमांड चलाऊं, तो क्या बस ब्रांच को करंट ब्रांच में खींच लेंगे?

सभी उदाहरणों से मुझे पता लग सकता है कि आप पहले 'चेकआउट ब्रांचनाम' चलाते हैं, फिर पुल बनाते हैं। मैं उससे बचने की कोशिश कर रहा हूं। जैसा कि मैंने कहा, यह एक मौजूदा शाखा है और मैं अभी नवीनतम संस्करण में अद्यतन करना चाहता हूं।


6
git fetchआपको जो चाहिए वो करना चाहिए।
ब्रैड

11
git fetchदूरस्थ शाखा की स्थानीय प्रति को अपडेट करेगा, लेकिन किसी स्थानीय शाखा को नहीं, भले ही उस विशिष्ट दूरस्थ शाखा को ट्रैक करने के लिए स्थापित किया गया हो। यह हो सकता है या नहीं हो सकता है जो चाहता था। (संपादित करें: डिफ़ॉल्ट रूप से, वैसे भी। इसे अलग तरह से व्यवहार करने के लिए तर्कों के साथ इसे कॉल करना संभव है, लेकिन उस मामले में, तर्कों को वास्तव में इंगित किया जाना चाहिए।)

2
मुझे समझ में नहीं आता ... हर कोई देव सर्वर पर एक ही स्थानीय भंडार का उपयोग कर रहा है? क्या इसीलिए आप शाखाओं को स्विच नहीं करना चाहते हैं? क्यों नहीं, हर कोई अपना निजी क्लोन बना सकता है जिसमें वे काम कर सकते हैं? यह भी देखें : किसी स्थानीय शाखा को अपडेट किए बिना उसे अपडेट करें?

जवाबों:


221

मैं एक ही चीज़ की तलाश में था और आखिरकार वह जवाब मिला जो मेरे लिए एक और स्टैकओवरफ़्लो पोस्ट में काम करता था: चेकआउट्स का उपयोग किए बिना Git शाखाओं को मर्ज करना, अपडेट करना और खींचना

मूल रूप से:

git fetch <remote> <srcBranch>:<destBranch>


क्या स्रोत शाखा को निर्दिष्ट करने के बजाय अपस्ट्रीम शाखा का उपयोग करने का एक तरीका है?
शानदार

दुख की बात है, लेकिन pullपैरामीटर है fetch: नहीं है -s <strategy>, -Xsubtree=...जो मेरे लिए एक महत्वपूर्ण था, तो यह एक बराबर प्रतिस्थापन नहीं है। मेरे पास यहां वर्णित मुद्दा था: congruityservice.com/blog/… लेकिन मेरे मामले में मैं बिल्कुल चेकआउट नहीं चाहता था।
एंड्री

2
इस सवाल को ध्यान में रखते हुए पुल के बारे में है, ऐसा लगता है कि उत्तर इसके बजाय होना चाहिए git pull <remote> <srcBranch>:<destBranch>
जे। वुडकुक

यदि आपके स्थानीय भंडार में कमिट पहले से ही हैं:git fetch . origin/master:master
इवान

74

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

यह सब करने के लिए, कार्यक्षेत्र को सुविधा शाखा पर रखें और सभी स्विचिंग से बचें, मैं यह करता हूं:

git fetch origin master:master

git rebase master

और यह चाल को अच्छी तरह से करता है।


19
यह अच्छी सलाह है, लेकिन नीचे दिए गए उत्तरों के अनुसार: यदि आप चालू हैं featureऔर आप जो करना चाहते हैं, उसके अनुसार, अपने स्थानीय masterको मूल के अनुरूप होने के लिए अपडेट करना है , बिना स्पर्श के feature, बस करो git fetch origin master:master... और यह ऐसा है जैसे आपने किया छिपाया-checkoutMaster-पुल checkoutFeature-stashPop!
शहर

7
मूल मास्टर को अपनी स्थानीय शाखा में मर्ज करने के लिए, आपको स्थानीय मास्टर को खींचने की आवश्यकता नहीं है। आप उपयोग कर सकते हैं git merge origin/master
Dan

-1

यदि आप चाहते हैं कि स्थानीय शाखा युक्तियां फिर से बताई जाएं git fetch, तो आपको कुछ अतिरिक्त चरणों की आवश्यकता है।

अधिक वस्तुतः, मान लीजिए GitHub रेपो शाखाएं हैं D, B, C, और master(इस अजीब शाखा-नाम-सेट के लिए कारण एक पल में स्पष्ट हो जाएगा)। आप मेजबान पर हैं devhostऔर आप एक रेपो में हैं जहां originजीथब रेपो है। आप कर git fetchजो सब कुछ खत्म हो वस्तुओं और अद्यतन लाता है, origin/D, origin/B, origin/C, और origin/master। अब तक सब ठीक है। लेकिन अब आप कहते हैं कि तुम हो के लिए कुछ, पर चाहते हैं devhost, करने के लिए स्थानीय शाखाओं D, B, C, और / या master?

मेरे पास ये स्पष्ट (वैसे भी मेरे लिए) प्रश्न हैं:

  1. आप सभी शाखाओं के सुझावों को अपडेट क्यों करना चाहते हैं ?
  2. क्या होगा यदि कुछ शाखा (जैसे, B) ने माना है कि दूरस्थ (जीथूब) रेपो में कमी है? क्या उन्हें विलय, विद्रोह या ...?
  3. क्या होगा यदि आप कुछ शाखा (उदाहरण के लिए C) और कार्य निर्देशिका और / या सूचकांक को संशोधित कर रहे हैं, लेकिन प्रतिबद्ध नहीं हैं?
  4. क्या होगा अगर रिमोट रेपो में नई शाखाएँ ( A) और / या शाखाओं को हटा दिया गया है ( D)?

यदि इसका उत्तर (1) है, "क्योंकि devhostवास्तव में विकास के लिए नहीं है, बल्कि एक स्थानीय दर्पण है जो केवल जीथब रेपो की स्थानीय रूप से उपलब्ध प्रति रखता है ताकि हमारे सभी वास्तविक डेवलपर्स इसे धीरे-धीरे पढ़ने के बजाय जल्दी से पढ़ सकें। github ", तो आप" सामान्य "रेपो के बजाय" दर्पण "चाहते हैं। इसके पास कार्य निर्देशिका नहीं होनी चाहिए, और शायद इसे या तो पुश स्वीकार नहीं करना चाहिए, जिस स्थिति में शेष प्रश्न बस चले जाते हैं।

यदि कुछ अन्य उत्तर है, (2-4) समस्याग्रस्त हो जाते हैं।

किसी भी स्थिति में, दूरस्थ रीफ़्स ( git fetch -pउदाहरण के लिए चलने के बाद ) के आधार पर स्थानीय रीफ़ को अपडेट करने का तरीका यहाँ है :

for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
    local=${ref#refs/remotes/origin/}
    ... code here ...
done

... code here ...अनुभाग में क्या जाता है यह सवालों के जवाब पर निर्भर करता है (2-4)।


-5

उपयोग

git fetch

बजाय। यह आपके रेपो में रिमोट रिफ और ऑब्जेक्ट को अपडेट करता है, लेकिन स्थानीय शाखाओं, हेड और वर्कट्री को अकेला छोड़ देता है।


17
लेकिन वह अपने विकास सर्वर की स्थानीय शाखाओं को अपडेट नहीं करता है ... यह केवल उस git फ़ोल्डर पर "मूल" शाखाओं को ताज़ा करता है, जो पूछने वाले के गितूब रेपो के अनुरूप है।
एवेस

1
या, यदि आप मेरी समस्या का संस्करण चाहते हैं: मैं अपनी कार्यशील शाखा को "मास्टर" के साथ मिलाना चाहता हूं, न कि "मूल / ssh के स्वामी: // bla bla bla" के साथ। लाने से मूल / गुरु अपडेट होगा, लेकिन मास्टर नहीं।
एवेस

-6

संपादित करें: 'गिट पुल' का उपयोग करें यह सभी शाखाओं को रेपो से प्राप्त करेगा और यह भी नवीनतम में अपडेट करेगा कि क्या शाखा केवल वर्तमान शाखा के लिए स्थानीय प्रणाली से बाहर निकलती है। नोट: जीआईटी पुल लाने के लिए + मर्ज के बराबर है जो सभी शाखाओं को प्राप्त करता है लेकिन केवल वर्तमान शाखा को मर्ज करता है।


6
कहने के लिए बेहतर है: pullक्या एक भ्रूण (जो, हाँ, रिमोट से सब कुछ प्राप्त करता है) लेकिन फिर केवल वर्तमान शाखा का विलय करता है ।
torek

मेरे अपमान के इरादे से कोई अपराध नहीं, मुझे पता है कि आप जो कह रहे हैं वह सही और तथ्यपूर्ण है, और ओपी ने वास्तव में इस बात की पुष्टि करने के लिए कहा था कि पुल क्या करता है (और आपने उसे स्पष्टीकरण दिया है), लेकिन यह संबोधित नहीं करता है उसके बाद वह क्या था: क्या आपकी शाखा से संबंधित शाखा में नवीनतम कमिट करने के लिए पहले शाखा की जांच किए बिना एक तरीका है।
गुरसे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.