2015-02-27 7 views
7

पर मौजूद है अगर मैं देखने के लिए अगर मेरी नवनिर्मित स्थानीय शाखाओं में से एक एक एक पंक्ति कमांड के साथ रिमोट पर मौजूद चाहते हैं। एक उपनाम या समारोह है कि अनुमति होगी बनाने की तरह मुझे मैन्युअल अभीचेक स्थानीय शाखा रिमोट Git

git remoteExists <branchName> 

टाइप करने के लिए मैं रिमोट पर हर शाखा बंद सूची और अगर मेरे स्थानीय शाखा है देखने के लिए जाँच। यह उतना आसान नहीं है जितना मैं चाहता हूं क्योंकि हमारे रिमोट में सैकड़ों शाखाएं हैं, जिनमें से कई समान नाम हैं।

मैं स्विचन हूँ शाखाओं अक्सर एक समय में अलग अलग बातें पर काम कर रहा है, शायद 6-7, और यह याद रखना मुश्किल है अगर मैं पूरी की और एक शाखा आगे बढ़ाया है जो या अगर मैं अभी भी इसे खत्म करने के लिए की जरूरत है।

मैं खोज की है और इस के समान काम करने के लिए कुछ तरीके पाया है, लेकिन बहुत से अनावश्यक रूप से जटिल लग रहा था, वहाँ यह करने के लिए एक सरल तरीका है?

संपादित

मैं क्या कर रहा हूँ पर स्पष्ट है। मैं एक दूरस्थ शाखा से शुरू कर रहा हूं और उस से एक स्थानीय शाखा बना रहा हूं। मैं अपनी स्थानीय शाखा में बदलाव कर रहा हूं और धक्का दे रहा हूं। मैं अपस्ट्रीम शाखा सेट नहीं करना चाहता, क्योंकि मैं इस शाखा का फिर से उपयोग नहीं करूँगा; रिमोट शाखा को संभालने वाला व्यक्ति मेरे परिवर्तनों को देखेगा और उन्हें दूरस्थ संस्करण में एकीकृत करेगा।

यह काम करता है:

git diff <branchName> remotes/origin/<branchName> 

घातक: अस्पष्ट तर्क 'रिमोट/मूल/TestReadyBranch': अज्ञात संशोधन या काम कर पेड़ में नहीं पथ। संशोधनों से पथ को अलग करने के लिए '-' का उपयोग करें, जैसे: 'गिट [...] - [...]'

इस त्रुटि को देखने पर मुझे पता चलेगा कि शाखा मौजूद नहीं है दूरस्थ। क्या ऐसा करने का कोई क्लीनर तरीका है? यदि आपके स्थानीय शाखा बनाम नदी के ऊपर ट्रैकिंग शाखा परिवर्तन

+0

काम करता है ' एक यूनिक्स पर चल रहा है, [git-prompt.sh] में त्वरित एक्सटेंशन (https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh) फ़ाइल 'contrib' में इसमें कुछ फ़ंक्शन हैं जो इस जानकारी को आपके प्रॉम्प्ट में जोड़ते हैं। हर बार इसे पुनः टाइप करने से बहुत तेज़। –

+0

यदि आप अपस्ट्रीम सेट नहीं कर रहे हैं, तो आपको गिट को यह बताने की ज़रूरत है कि आप किस दूरस्थ शाखा को अपनी स्थानीय शाखा से तुलना करना चाहते हैं। अन्यथा, आपका प्रश्न समझ में नहीं आता है। – Jubobs

+0

@ जुबब्स। कोई बात नहीं। यह सिर्फ रिमोट/मूल/ होगा। मुझे यह कैसे करना है? – Alex

उत्तर

5
git fetch origin 
git branch -r --contains $mybranch 

और आप वाकई किसी भी धक्का इस विशेष रेपो आप लाना छोड़ सकते हैं से आया हो।

+0

बिल्कुल वही जो मैं खोज रहा था, धन्यवाद! – Alex

2

जाँच करने के लिए, आप चला सकते हैं:

git diff @{u} 

कहाँ @{u} नदी के ऊपर शाखा का नाम का उल्लेख है। git-rev-parse(1) मैन पेज से:

@ {अपस्ट्रीम}, उदा। मास्टर @ {नदी के ऊपर} @ {यू}

प्रत्यय @ {नदी के ऊपर} एक BRANCHNAME (संक्षिप्त रूप @ {यू}) के लिए शाखा है, जो शाखा BRANCHNAME द्वारा निर्दिष्ट की चोटी पर निर्माण करने के लिए सेट कर दिया जाता है को संदर्भित करता (branch..remote और branch..merge के साथ विन्यस्त)। वर्तमान से एक के लिए एक लापता BRANCHNAME चूक।

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

git diff --quiet @{u} 

यह एक गैर शून्य से बाहर निकलें कोड वापस आ जाएगी। जैसे:

git diff --quiet @{u} || echo "You need to push your changes!" 
+1

यह काम नहीं कर रहा है। यह घातक कह रहा है: शाखा Alex

+0

के लिए कोई अपस्ट्रीम कॉन्फ़िगर नहीं किया गया वास्तव में, संदेश "आपको अपने परिवर्तनों को धक्का देना है!" थोड़ा भ्रामक है। यह मामला हो सकता है कि अपस्ट्रीम स्थानीय शाखा से आगे है, इस मामले में उपयोगकर्ता को पहले खींचना चाहिए, और केवल बाद में धक्का देना चाहिए। – Jubobs

+0

@ एलेक्स आपको अपनी शाखा के अपस्ट्रीम को सेट करना होगा ('गिट शाखा - सेट-अपस्ट्रीम ... 'का उपयोग करना। यदि आपकी स्थानीय शाखा किसी भी दूरस्थ शाखा से जुड़ी नहीं है, तो पूछें कि आपको धक्का देने की आवश्यकता है या नहीं। – Jubobs

0

यह अगर वर्तमान शाखा रिमोट पर मौजूद नहीं है 2 के लिए बाहर निकलें कोड सेट हो जाएगा:

git ls-remote --heads --exit-code origin "$(git symbolic-ref --short HEAD)" 

तो फिर तुम खोल में देख सकते हैं:

if [ $? -eq 2 ] 

या माणिक में:

if $?.exitstatus == 2 

या इसी तरह किसी भी अन्य भाषा में।

0

अपने स्थानीय Git फ़ोल्डर के अंदर, आप

git checkout 

क्या कर सकते हैं अगर कोई इसी दूरस्थ शाखा है, वहाँ कोई उत्पादन होता है। अन्यथा यह स्थानीय और दूरस्थ शाखा के बीच संबंधों को बाहर प्रिंट होगा (आगे, पीछे, अलग हुए, आदि)

नोट: इस 1.8.3.1 के लिए काम नहीं करता है, लेकिन आप यह सोचते हैं के लिए 2.16.2

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