आप केवल वर्तमान शाखा को कैसे खींच सकते हैं?


81

क्या इस शाखा को निर्दिष्ट किए बिना इसे सेट करने के लिए एक कॉन्फ़िगर तरीका है?

जवाबों:


84

Git पहले से ही केवल वर्तमान शाखा को खींचता है। यदि आपके पास एक ट्रैकिंग शाखा के रूप में स्थापित की गई शाखा है, तो आपको दूरस्थ शाखा को निर्दिष्ट करने की आवश्यकता नहीं है। git branch --set-upstream localbranch reponame/remotebranchट्रैकिंग संबंध स्थापित करेगा। आप तब जारी करते हैं git pull [--rebase]और केवल उस शाखा को अपडेट किया जाएगा।

बेशक, सभी रिमोट ट्रैकिंग शाखाएं और रिमोट के लिए सभी रेफरी को अपडेट किया जाएगा, लेकिन केवल आपकी स्थानीय ट्रैकिंग शाखा को संशोधित किया जाएगा।

इस सामान्य ऑपरेशन के टाइप करने के लिए उपयोगी बैश उर्फ:

# Add an alias to pulling latest git changes into your same branch
alias pullhead='git pull origin $(git rev-parse --abbrev-ref HEAD)'

Powershell फ़ंक्शन जो ऐसा करता है:

Function pullhead {
    $cur_head="$(git rev-parse --abbrev-ref HEAD)"
    & git pull origin ${cur_head}
}

यह सही है, और शायद थोड़ा अजीब है क्योंकि "गिट पुश" (डिफ़ॉल्ट रूप में) सभी शाखाओं को (एक ही रिमोट नाम से) पुश करने की कोशिश करता है।
एलेसेंड्रो डी सिमोन

2
@AlessandroDs ठीक है, मैं पुश करने के लिए सेट करें। केवल उस कारण के लिए अपस्ट्रीम करने के लिए। Push.default के लिए नया डिफ़ॉल्ट "सरल" है जो फिर से केवल वर्तमान शाखा को अपडेट करता है, इसलिए जो खींचता है वह कहीं अधिक समानांतर है।
सेठ रॉबर्टसन

1
@ धनंजह: सभी परिवर्तन दूरस्थ रेपो (दूरस्थ ट्रैकिंग शाखाओं, जैसे मूल / मास्टर उत्पत्ति / फू, आदि) से खींचे जाते हैं। यदि आपको एक स्थानीय शाखा में अपस्ट्रीम परिभाषित के साथ चेक किया जाता है, तो केवल उस स्थानीय शाखा को अपडेट किया जाएगा। यदि आप एक अपस्ट्रीम के बिना एक स्थानीय शाखा में जांचे जाते हैं, तो आपको अधिक जानकारी निर्दिष्ट करनी होगी या अपस्ट्रीम को सेट करना होगा। गैर-स्थानीय चेकआउट को संशोधित करने का प्रयास न करें, स्थानीय शाखा बनाएं और आगे बढ़ें। यदि आप जो ट्रांसफर करते हैं उसे कम करना चाहते हैं, तो आप अपने रिमोट के रीस्पेक को अपने स्थानीय गिट कॉन्फिग में अपडेट कर सकते हैं।
सेठ राबर्टसन 12

1
क्या कोई अंतर्निहित तरीका है कि सभी refs को अपडेट न करने के लिए केवल वर्तमान शाखा प्राप्त करें?
आदित्य एमपी

1
@ आदित्य मेनन: आसानी से नहीं। आपको केवल विशिष्ट रेफरी (शाखाएँ, टैग आदि) लाने के लिए refspec (जैसे git config Remote.origin.fetch) को अपडेट करना होगा। अधिक विशिष्ट उदाहरणों के लिए stackoverflow.com/questions/15507264/… देखें ।
सेठ रॉबर्टसन

61

मैंने इसे इस तरह किया:

git pull origin "$(git branch | grep -E '^\* ' | sed 's/^\* //g')"

या

git pull origin $(git rev-parse --abbrev-ref HEAD)

यह वर्तमान शाखा से अर्क निकालता है git branch, और उस शाखा को दूरस्थ मूल से खींचता है।

ध्यान दें, जैसे कि सेठ रॉबर्टसन ने कहा, जब कोई तर्क नहीं दिया जाता है तो केवल वर्तमान शाखा को संशोधित किया जाता है लेकिन सभी दूरस्थ शाखाओं को लाया जाता है। मैं सभी दूरस्थ शाखाओं को प्राप्त नहीं करना चाहता, इसलिए मैंने इसे इस तरह से किया।


3
git branchवास्तव में शाखा जानकारी के लिए पार्स नहीं किया जाना चाहिए। यह जानकारी git rev-parseकमांड बनाने के साथ उपलब्ध है :git pull origin $(git rev-parse --abbrev-ref HEAD)
पॉल डेलर

@ayke मैंने पॉल डेलरे जवाब को आपके साथ जोड़ा क्योंकि यह भी काम करता है, मुझे आशा है कि आप दोनों को बुरा नहीं लगेगा
टिमो हुओवेनन

1
बस जिज्ञासु: एक सरल "गिट पुल" के बीच अंतर क्या है (मैं जिस शाखा को खींचना चाहता हूं, उसकी जाँच करें) और आपका सुझाव? आपका कमांड प्रतिस्थापन परिणाम git pull origin <current-branch>वैसे भी डिफ़ॉल्ट है, है ना? क्या आप यह अनुमान लगा रहे हैं कि अन्य दूरस्थ शाखाएँ (जैसे मूल / अन्य-शाखा आदि) अपडेट नहीं हैं, ताकि ट्रैफ़िक कम हो जाए?
पीटर - मोनिका

मैंने इस युग का उत्तर दिया, मैं वास्तव में अब और नहीं जानता। आपको संभवतः स्वीकृत उत्तर के साथ जाना चाहिए ...
ayke

@ पीटरए. श्नाइडर यदि आप केवल टाइप करते हैं git pullतो आप एक संदेश की तरह समाप्त हो सकते हैं There is no tracking information for the current branch. Please specify which branch you want to merge with.। फिर आप हमेशा टाइपिंग समाप्त करें git pull origin my-feature-branch। मैं वास्तव में जानना चाहता हूं कि यह स्थिति कैसे आती है कि कोई ट्रैकिंग जानकारी नहीं है।
अल्फ

18

अपडेट करें

मेरे द्वारा जोड़ा गया पुराना उत्तर किसी भी अधिक काम नहीं करता है: /। लेकिन मेरे द्वारा लगाए गए PUSH संस्करण के बारे में कुछ संकेत मिलने के बाद, मेरा मतलब है कि यह उत्तर वास्तव में किसी को मदद कर रहा है जो खोज इंजन से यहां आ रहा है, इसलिए मैं इस उत्तर को रखूंगा।

Git के नए संस्करण के लिए इसे आज़माएँ:

$ git config --global push.default current

9
मुझे विश्वास नहीं है कि पुल.डाल्ट मौजूद है। Git-scm या kernel.org देखें ।
मृत्यु

2
हाँ। linux पर git 2.3.4 उपरोक्त सभी शाखाओं को भी प्राप्त करता है pull.default=current। मैं देख रहा हूँ कि मेरी git cloneडिफ़ॉल्ट रूप से जोड़ी गई, remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*लेकिन यह बहुत मानक है।
मृत्युंजय

6
कोई pull.defaultकॉन्फ़िगर चर नहीं है। अपने git config में डालने से कुछ नहीं होगा।
डेविड सैंडर्स

5
सवाल गिट पुल के बारे में है, और जवाब में कई अपवित्र के साथ गिट धक्का है। यह भ्रामक है @BrunoCasali आपने अपने उत्तर को संपादित क्यों किया और इसे हटा दिया यदि यह आपके लिए काम करता है? यदि आपको लगता है कि उत्तर गलत है तो कृपया अपवर्तित रखने के लिए अप्रासंगिक सूचनाओं को रखने के बजाय इसे हटा दें।
TJ

5

हाँ, एक विन्यास है जिसे .gitconfigउदाहरण के लिए बदला जा सकता है :

[push]
  default = current

जो वर्तमान शाखा को प्राप्त होने वाले छोर पर उसी नाम के साथ एक शाखा को अद्यतन करने के लिए धक्का देगा।

जॉचो:

git config --global --get push.default

देखें: Git-config


3

--set-upstreamझंडा पदावनत है और निकाल दिया जाएगा। इसलिए, का उपयोग करें --trackया--set-upstream-to

उदाहरण: यदि आप इस शाखा के लिए ट्रैकिंग जानकारी सेट करना चाहते हैं तो आप ऐसा कर सकते हैं:

git branch --set-upstream-to=<remote>/<branch> develop

यह (स्रोत?) पदावनत किया जा सकता है, लेकिन --set-upstream-to=यह आपके ट्रैकिंग जानकारी के बारे में पता नहीं होने पर गिट द्वारा उल्लेख किया जा रहा है। पदावनति का कोई उल्लेख नहीं है।
एड्रियन

@AdrienGiboire यहां कुछ जानकारी है: डिप्रेशन के
biniam

0

यहां एक git उपनाम है जो मान नहीं रहा है कि रिमोट एक originशाखा को ट्रैक नहीं कर रहा है, तो संभालता है।

pullh = "!f() { set -e; set -o pipefail; arr=($(git rev-parse --abbrev-ref @{u} | sed 's/\\//\\n/')); git pull ${arr[0]} ${arr[1]}; }; f"

(डिस्क्लेमर: मैं बहुत बैश नौसिखिया हूं और ऊपर शायद बहुत सरल हो सकता है।)

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