Git में दूरस्थ शाखा को ट्रैक करना कैसे बंद करें?


555

Git में दूरस्थ शाखा की ट्रैकिंग कैसे रोकें ?

मैं ट्रैकिंग बंद करने के लिए कह रहा हूं क्योंकि मेरे ठोस मामले में, मैं स्थानीय शाखा को हटाना चाहता हूं, लेकिन दूरस्थ को नहीं। स्थानीय को हटाने और हटाने को दूरस्थ पर धकेलने से दूरस्थ शाखा भी नष्ट हो जाएगी:

क्या मैं बस कर सकता हूं git branch -d the_branch, और जब मैं बाद में इसे प्रचारित नहीं करूंगा git push?

क्या यह केवल तभी प्रचारित करेगा जब मैं git push origin :the_branchबाद में चलाऊंगा?

जवाबों:


707

के रूप में में उल्लेख किया Yoshua WUYTS ' जवाब , का उपयोग करते हुए git branch:

git branch --unset-upstream

अन्य विकल्प:

आपको अपनी स्थानीय शाखा को हटाने की आवश्यकता नहीं है।

बस उस स्थानीय शाखा को हटा दें जो दूरस्थ शाखा को ट्रैक कर रही है:

git branch -d -r origin/<remote branch name>

-r, --remotesरिमोट-ट्रैकिंग शाखा को हटाने के लिए git बताता है (यानी, दूरस्थ शाखा को ट्रैक करने के लिए सेट की गई शाखा को हटा दें)। यह रिमोट रेपो पर शाखा को नहीं हटाएगा !

देखिए " एक कठिन समय को समझने के लिए git-fetch "

स्थानीय ट्रैकिंग शाखाओं की ऐसी कोई अवधारणा नहीं है, केवल दूरस्थ ट्रैकिंग शाखाएँ हैं।
तो origin/masterके लिए एक रिमोट ट्रैकिंग शाखा है masterमें originरेपो

जैसा कि Dobes Vandermeer के उत्तर में उल्लिखित है , आपको स्थानीय शाखा से संबंधित कॉन्फ़िगरेशन को रीसेट करने की भी आवश्यकता है :

git config --unset branch.<branch>.remote
git config --unset branch.<branch>.merge

के लिए अपस्ट्रीम जानकारी निकालें <branchname>
यदि कोई शाखा निर्दिष्ट नहीं है, तो यह वर्तमान शाखा में चूक करती है।

(git 1.8+, अक्टूबर 2012, कार्लोस मार्टिन नीटो द्वारा प्रतिबद्ध b84869e ) (carlosmn )

इससे कोई भी धक्का / खींच पूरी तरह से अनजान हो जाएगा origin/<remote branch name>


8
रिमोट ट्रैकिंग ब्रांच को git लाने के बाद दोबारा बनाया गया है। क्या इन को बाहर करना संभव है?
मैट आर

1
@Matt: मेरा मानना ​​है कि यह remote.<name>.fetchrefspec config सेटिंग सेट करके किया जाएगा , लेकिन मुझे यकीन नहीं है कि अगर आप एक refspec निर्दिष्ट करते समय एक शाखा को बाहर कर सकते हैं।
VonC

यह मेरे लिए भी इस तरह से दिखाई दिया; मैं अपनी स्थानीय शाखा को फिर से बनाने में सक्षम था, हालांकि तेज-फॉरवर्ड के बाद शाखाओं के बीच स्पष्ट संबंध गायब हो गया।
२१:१

7
@ruffin: यह पूरी तरह से सामान्य है: आपके रेपो में स्थानीयgit branch -d -r origin/<remote branch name> ट्रैकिंग शाखा को स्थानीय रूप से घोषित किया गया हटा देगा । यह रिमोट रेपो पर ही शाखा को नहीं हटाएगा (केवल git push :developmentऐसा ही करेगा)। इसलिए जब आप अपने स्थानीय developmentको दूरस्थ विकास शाखा (दूरस्थ रेपो पर) से अलग इतिहास के साथ आगे बढ़ा रहे हैं, तब भी आपको non-fast-forwardचेतावनी मिलेगी ।
वॉनसी

1
@ मार्को सच है, लेकिन मैं इसे वैसे भी करना पसंद करता हूं, मुझे यह "क्लीनर" लगता है।
वॉन मार्क

200

वर्तमान शाखा के लिए अपस्ट्रीम को हटाने के लिए:

$ git branch --unset-upstream

यह Git v.1.8.0 या नए के लिए उपलब्ध है। (स्रोत: 1.7.9 रेफरी , 1.8.0 रेफरी )

स्रोत


20
चुना हुआ जवाब होना चाहिए था।
कैसर

9
यदि आप वर्तमान शाखा को नहीं हटाना चाहते हैं, तो बस:git branch --unset-upstream [branchname]
सोनाटा

2
लगता है यह नया है। थोड़ा और जानकारी अच्छी होगी। परिचय का संस्करण।
मैनुएल श्नाइड

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

हम्म, मैं हो रही है fatal: 'origin/master' does not appear to be a git repository fatal: Could not read from remote repository. ऐसा करने के लिए और एक Git पुल मूल / मास्टर कोशिश कर के बाद
information_interchange

106

स्थानीय और दूरस्थ शाखा चलाने के बीच संबंध को दूर करने के लिए:

git config --unset branch.<local-branch-name>.remote
git config --unset branch.<local-branch-name>.merge

यदि आपको इसकी आवश्यकता नहीं है तो वैकल्पिक रूप से स्थानीय शाखा को बाद में हटा दें:

git branch -d <branch>

यह दूरस्थ शाखा को नहीं हटाएगा।


11
git branch -d <branch>है संघ को दूर करने की आवश्यकता है।
मार्को

1
Im JIRA का उपयोग कर। जब मैं फिर से खींचता हूं तो शाखा प्रकट होती है। मैं इसे कैसे रोक सकता हूं?
पाउडर ३६६

1
@ मार्को सही, लेकिन अगर आप उपयोग करते git branch -vvहैं तो आप तब भी पुरानी शाखाओं को देखेंगे जब तक आप नहीं करते git branch -d <branch>
SeldomNeedy

@ powder366 आपकी सेटिंग्स के आधार पर, सभी दूरस्थ शाखाओं git pullको पकड़ सकता है और रिमोट पर "प्रकट" होने के लिए किसी भी विचार को फिर से जोड़ सकता है। आप इसे "सभी शाखाओं को खींच" व्यवहार को बदल सकते हैं या कर सकते हैं । यहाँ पर और अधिकgit config [--global] push.default simplegit config [--global] push.default currentpush.default
SeldomNeedy

1
@SeldomNeedy मुझे लगता है कि आप एक DVCS के बिंदु को याद कर रहे हैं? मुद्दा यह है कि मेरे पास एक शाखा हो सकती है जो एक अपस्ट्रीम शाखा को ट्रैक करना शुरू करती है, लेकिन यह कि मैं एक दृष्टिकोण को आगे बढ़ाने के लिए अलग हो जाता हूं जो अपस्ट्रीम शाखा उपयोग नहीं कर रही है। उस स्थिति में, शाखा न तो "पुरानी" है (क्योंकि मैं अभी भी उस पर विकास कर रहा हूं) और न ही "अप्रयुक्त" (क्योंकि मैं इसका उपयोग कर रहा हूं)। यह एक DVCS के डिजाइन का एक बड़ा हिस्सा है .. क्या इसका कोई मतलब है?
मार्को

33

सबसे सरल तरीका संपादित करना है .git/config

यहाँ एक उदाहरण फ़ाइल है

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
[remote "origin"]
        url = git@example.com:repo-name
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "test1"]
        remote = origin
        merge = refs/heads/test1
[branch "master"]
        remote = origin
        merge = refs/heads/master

लाइन को हटा दें merge = refs/heads/test1test1शाखा अनुभाग में


3
+1 मैं निश्चित रूप से यह नहीं कह सकता कि यह सबसे आसान तरीका है, लेकिन यह निश्चित रूप से मुझे समझने में सबसे आसान साबित होता है (और उम्मीद है कि इसे याद रखें)!
ऋषि

अच्छा समाधान +1। यह वास्तव में वह स्थान है जहां ट्रैकिंग पंजीकृत है, इसे बदलना आसान है, स्पष्ट है कि यह क्या करता है। कमांडलाइन .git/configभी उपलब्ध है।
हकर्रे

5
fyi, यह Dobes Vandermeer द्वारा "git config --unset" समाधान के समान है। "git config" इस फ़ाइल को संपादित करता है।
JZ

10

आप रिमोट-ट्रैकिंग शाखा का उपयोग करके हटा सकते हैं

git branch -d -r origin/<remote branch name>

जैसा कि ऊपर VonC उल्लेख करता है। हालाँकि, यदि आप शाखा की अपनी स्थानीय प्रति रखते हैं, तब git push भी उस शाखा को आगे बढ़ाने की कोशिश करेंगे (जो आपको रफ -फॉरवर्ड करने के लिए गैर-फास्ट-फॉरवर्ड त्रुटि दे सकती है )। इसका कारण यह है कि विन्यास push.defaultचूक का matchingमतलब है:

मिलान - सभी मिलान शाखाओं को धक्का दें। दोनों सिरों में समान नाम वाली सभी शाखाओं का मिलान माना जाता है। यह डिफ़ॉल्ट है।

(देखें http://git-scm.com/docs/git-config के तहत push.default)

इस रूप में देखकर शायद तुम क्या चाहते थे, जब आप रिमोट ट्रैकिंग शाखा नष्ट कर दिया आप सेट कर सकते हैं नहीं है push.defaultकरने के लिए upstream(या trackingआप Git अगर <1.7.4.3)

अपस्ट्रीम - करंट ब्रांच को इसके अपस्ट्रीम ब्रांच पर पुश करें।

का उपयोग करते हुए

git config push.default upstream

और git उन शाखाओं को धकेलने की कोशिश करना बंद कर देगा जिन्हें आपने "ट्रैक करना बंद कर दिया है।"

नोट: सरल उपाय यह होगा कि आप अपनी स्थानीय शाखा का नाम बदलकर कुछ और रखें। इससे भ्रम की संभावना भी समाप्त हो जाएगी।


3

पैटर्न से मेल खाती सभी रिमोट-ट्रैकिंग शाखाओं को हटाने के लिए यहां एक-लाइनर है:

git branch -rd $(git branch -a | grep '{pattern}' | cut -d'/' -f2-10 | xargs)


यदि केवल रिमोट-ट्रैकिंग शाखाएँ अनट्रैक (डिलीट) की जानी हैं, तो मुझे लगता है कि यह एक-लाइन वैकल्पिक है:git branch -r -D $(git branch -r | grep -v "master")
dma_k

1

यह सवाल का जवाब नहीं है, लेकिन मैं यह पता नहीं लगा सका कि ऊपर की टिप्पणी में सभ्य कोड प्रारूपण कैसे प्राप्त किया जाए ... इसलिए ऑटो-डाउन-प्रतिष्ठा-धिक्कार यहां मेरी टिप्पणी है।

मेरे पास एक। शमीना [उर्फ] में मेरे .itconfree.in प्रविष्टि में @Dobes द्वारा प्रस्तुत नुस्खा है।

# to untrack a local branch when I can't remember 'git config --unset'
cbr = "!f(){ git symbolic-ref -q HEAD 2>/dev/null | sed -e 's|refs/heads/||'; }; f"
bruntrack = "!f(){ br=${1:-`git cbr`};  \
    rm=`git config --get branch.$br.remote`; \
    tr=`git config --get branch.$br.merge`; \
    [ $rm:$tr = : ] && echo \"# untrack: not a tracking branch: $br\" && return 1; \
    git config --unset branch.$br.remote; git config --unset branch.$br.merge; \
    echo \"# untrack: branch $br no longer tracking $rm:$tr\"; return 0; }; f"

फिर मैं बस चला सकता हूं

$ git bruntrack branchname

1
+1। ऊपर मेरे जवाब के अलावा, अच्छा उर्फ ।
वॉन

-1

git branch --unset-upstream सभी स्थानीय शाखाओं को ट्रैक करना बंद कर देता है, जो वांछनीय नहीं है।

इसके बाद [branch "branch-name"]वाली .git/configफाइल से सेक्शन हटा दें

git branch -D 'branch-name' && git branch -D -r 'origin/branch-name'

मेरे लिए सबसे अच्छा काम करता है।


-1

आप अपनी दूरस्थ शाखा को हटाने के लिए इस तरह का उपयोग कर सकते हैं

git remote remove <your remote branch name>

1
इससे उस रिमोट के लिए सभी रिमोट ट्रैकिंग शाखाएं हट जाएंगी : il आपके पास एक से अधिक हैं, जो समस्याग्रस्त हो सकते हैं।
VONC

-2

ऐसा करने का सबसे आसान तरीका शाखा को दूरस्थ रूप से हटाना और फिर उपयोग करना है:

git fetch --prune (उर्फ git fetch -p)


14
मैं उलझन में हूं, ओपी दूरस्थ शाखा को हटाना नहीं चाहता था।
madth3

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