दिलचस्प पोस्ट
टीएसटीटी फ़ाइल को खोलने के लिए एप्लिकेशन की सूची में मेरा ऐप क्यों नहीं है? क्या स्विफ्ट-आधारित एप्लिकेशन ओएस एक्स 10.9 / आईओएस 7 और कम पर काम करते हैं? Android में JSON को कैसे पार्स करना है फास्ट बिग्नम वर्ग गणना बड़ी सरणी आकारों में विभाजन की गलती जावास्क्रिप्ट में ऑब्जेक्ट्स / एरेज़ का प्रदर्शन क्या है? (विशेष रूप से Google V8 के लिए) बनने की स्थिति में कुंजीपटल के शीर्ष पर ऑब्जेक्ट को बनाए रखना FirstResponder या resignFirstResponder? आईई 10 में बैकअप-दृश्यता छिपा क्यों नहीं है, जब परिप्रेक्ष्य मूल तत्वों पर लागू होता है? क्या $ {var} पैरामीटर विस्तार अभिव्यक्ति को बेश में नेस्ट किया जा सकता है? ListView में ArrayAdapter को संशोधित करने में असमर्थ: असमर्थितऑपरेशन अपवाद क्यों एक सही शैल लिपि एक लिपटे / तुंटित / भ्रष्ट त्रुटि संदेश देगी? आपके आवेदन में एसकेएल बनाम में गणना करने के पेशेवर और विपक्ष क्या हैं I एक संख्या (1, 2, 3) को एक स्ट्रिंग में बदलने (एक, दो, तीन) PHP में PHP में अनुसूचित कार्यों का सबसे अच्छा तरीका क्या है अंतिम पत्र रंग बदलें

दोनों स्थानीय और दूरस्थ जीआईटी भंडार के लिए मास्टर शाखा का नाम बदलें

मेरे पास ब्रांच master जो दूरस्थ शाखा origin/master ट्रैक करता है।

मैं उन दोनों को स्थानीय स्तर पर और रिमोट पर master-old नाम से बदलना चाहता हूं। क्या यह संभव है? अन्य उपयोगकर्ताओं के लिए जिन्होंने origin/master को ट्रैक किया (और जिन्होंने हमेशा अपनी स्थानीय master शाखा git pull माध्यम से अपडेट किया) के लिए, मेरे रिमोट ब्रान्टल का नाम बदल जाने के बाद क्या होगा? क्या उनके git pull अभी भी काम git pull लिए या यह एक त्रुटि है कि यह origin/master अब नहीं मिल सकता है फेंक होगा?

फिर, आगे, मैं एक नया master शाखा (दोनों स्थानीय और दूरस्थ) बनाना चाहता हूँ। फिर, यह करने के बाद, अब क्या होगा अगर अन्य उपयोगकर्ता git pull ?

मुझे लगता है कि यह सब बहुत मुश्किल में होगा क्या मैं चाहता हूँ पाने के लिए एक साफ तरीका है? या क्या मैं master को छोड़ master जैसा कि एक नया शाखा master-new और सिर्फ आगे काम करता हो?

वेब के समाधान से एकत्रित समाधान "दोनों स्थानीय और दूरस्थ जीआईटी भंडार के लिए मास्टर शाखा का नाम बदलें"

पुनर्नामित करने की सबसे करीबी बात को हटाने और फिर रिमोट पर पुन: निर्माण करना। उदाहरण के लिए:

 git branch -m master master-old git push remote :master # delete master git push remote master-old # create master-old on remote git checkout -b master some-ref # create a new local master git push remote master # create master on remote 

हालांकि इसमें बहुत सारी चेतावनियां हैं सबसे पहले, कोई भी मौजूदा चेकआउट नाम के बारे में पता नहीं होगा – जीआईटी शाखा के नामों को ट्रैक करने का प्रयास नहीं करता है यदि नया master अभी तक अस्तित्व में नहीं है, तो git पुल बाहर त्रुटि होगी। यदि नया master बनाया गया है पुल master और master-old मर्ज करने का प्रयास करेगा इसलिए यह आमतौर पर एक बुरा विचार है जब तक आपके पास पहले से रिपॉजिटरी की जांच करने वाले सभी लोगों का सहयोग नहीं होता है।

नोट: जीआईटी के नए संस्करण आपको डिफ़ॉल्ट रूप से मास्टर शाखा को डिफॉल्ट रूप से हटाने की अनुमति नहीं देंगे। आप रिमोट रिपॉज़िटरी पर warn या ignore करने के लिए receive.denyDeleteCurrent कॉन्फ़िगरेशन मान सेट करके इसे ओवरराइड कर सकते हैं। अन्यथा, यदि आप तुरंत एक नया मालिक बनाने के लिए तैयार हैं, तो git push remote :master --force git push remote :master चरण, और पास- --force को git push remote master चरण में छोड़ दें। ध्यान दें कि यदि आप दूरस्थ के कॉन्फ़िगरेशन को बदलने में सक्षम नहीं हैं, तो आप मास्टर शाखा को पूरी तरह से हटा नहीं पाएंगे!

यह चेतावनी केवल वर्तमान शाखा (आमतौर पर master शाखा) पर लागू होती है; किसी भी अन्य शाखा को हटाया जा सकता है और इसके बाद के रूप में बनाया जा सकता है।

मान लें कि आप वर्तमान में master :

 git push origin master:master-old # 1 git branch master-old origin/master-old # 2 git reset --hard $new_master_commit # 3 git push -f origin # 4 
  1. पहले स्थानीय भंडार में master कमेट के आधार पर, origin रिपॉजिटरी में master-old शाखा बनाएं।
  2. इस नए origin/master-old शाखा के लिए एक नई स्थानीय शाखा बनाएं (जो स्वचालित रूप से एक ट्रैकिंग शाखा के रूप में स्थापित हो जाएगी)।
  3. अब अपने स्थानीय master को जो भी कहा जाता है उसे इंगित करने के लिए इंगित करें
  4. अंत में, अपने नए स्थानीय master को प्रतिबिंबित करने के लिए origin रिपॉजिटरी में बल-परिवर्तन master

(यदि आप इसे किसी भी अन्य तरीके से करते हैं, तो यह सुनिश्चित करने के लिए कम से कम एक और कदम की आवश्यकता है कि master-old को origin/master-old ट्रैक करने के लिए ठीक से स्थापित किया गया है। इस लेखन के समय में पोस्ट किए गए अन्य समाधानों में से कोई भी इसमें शामिल नहीं है )

गीट v1.7 के साथ, मुझे लगता है कि यह थोड़ा बदल गया है। नए दूरदराज के लिए अपने स्थानीय शाखा के ट्रैकिंग संदर्भ को अद्यतन करना अब बहुत आसान है

 git branch -m old_branch new_branch # Rename branch locally git push origin :old_branch # Delete the old branch git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote 
 git checkout -b new-branch-name git push remote-name new-branch-name :old-branch-name 

old-branch-name को हटाने से पहले आपको मैन्युअल रूप से new-branch-name स्विच करना पड़ सकता है

शाखा का नाम बदलने के कई तरीके हैं, लेकिन मैं बड़ी समस्या पर ध्यान केंद्रित करने जा रहा हूं: "ग्राहकों को तेजी से अग्रेषित करने और स्थानीय रूप से अपनी शाखाओं के साथ गड़बड़ करने की अनुमति देने के तरीके"

सबसे पहले एक त्वरित तस्वीर: मास्टर शाखा का नाम बदलना और ग्राहकों को तेज़ी से अग्रेषण करने की इजाजत देना

यह वास्तव में करना आसान है; लेकिन इसका दुरुपयोग न करें। मर्ज पर पूरा विचार टकराता है; क्योंकि वे तेजी से अग्रेषित करते हैं, और दूसरे के साथ एक शाखा के लिंक इतिहास

शाखा का नाम बदलना:

 # rename the branch "master" to "master-old" # this works even if you are on branch "master" git branch -m master master-old 

नई "मास्टर" शाखा बना रही है:

 # create master from new starting point git branch master <new-master-start-point> 

माता-पिता के इतिहास के लिए एक मर्ज प्रतिबद्ध बनाना:

 # now we've got to fix the new branch... git checkout master # ... by doing a merge commit that obsoletes # "master-old" hence the "ours" strategy. git merge -s ours master-old 

और वोला

 git push origin master 

यह काम करता है क्योंकि merge कमिट बनाने से शाखा को नए संशोधन में तेजी से अग्रेषण किया जा सकता है।

एक समझदार विलय प्रतिबद्ध संदेश का उपयोग कर:

 renamed branch "master" to "master-old" and use commit ba2f9cc as new "master" -- this is done by doing a merge commit with "ours" strategy which obsoletes the branch. these are the steps I did: git branch -m master master-old git branch master ba2f9cc git checkout master git merge -s ours master-old 

मैं मान रहा हूँ कि आप अभी भी उसी स्थिति के बारे में पूछ रहे हैं जैसे आपके पिछले प्रश्न में अर्थात, मास्टर-नया में अपने इतिहास में मास्टर-पुराना शामिल नहीं होगा। * यदि आप मास्टर-नया "मास्टर" कहते हैं, तो आप प्रभावी ढंग से इतिहास को पुनः लिखेंगे। यह कोई फर्क नहीं पड़ता कि आप उस राज्य में कब आ जाते हैं, जिसमें स्वामी गुरु की पिछली स्थिति का वंशज नहीं है, बस उस राज्य में है।

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

आपके प्रश्न का उत्तर केवल: आपको यह स्वीकार करना चाहिए कि कभी-कभी आपके इतिहास में गलती होगी यह ठीक हैं। यह सभी के लिए होता है Git.git रिपॉजिटरी में वापस लौट आए हैं। महत्वपूर्ण बात यह है कि एक बार हम इतिहास प्रकाशित करते हैं, ऐसा कुछ होता है जो हर कोई भरोसा कर सकता है।

* यदि ऐसा होता है, तो यह मास्टर पर कुछ बदलावों को प्रेरित करने के बराबर होगा, और फिर एक नई शाखा बना जहां वह इस्तेमाल करेगी। कोई बात नहीं।

चयनित उत्तर विफल हुआ जब मैंने इसे करने की कोशिश की यह एक त्रुटि फेंकता है: refusing to delete the current branch: refs/heads/master मुझे लगता है कि मैं अपने लिए क्या काम करेगा, पोस्ट करूँगा:

 git checkout master # if not in master already git branch placeholder # create placeholder branch git checkout placeholder # checkout to placeholder git push remote placeholder # push placeholder to remote repository git branch -d master # remove master in local repository git push remote :master # remove master from remote repository. 

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

अच्छा। मेरा 2 सेंट कैसे सर्वर पर लॉग इन के बारे में, git डायरेक्टरी में जाकर शाखा को नंगे रिपॉजिटरी में नामित करें। इसमें एक ही शाखा को पुनः अपलोड करने से संबंधित सभी समस्याएं नहीं हैं I असल में, 'क्लाइंट' स्वचालित रूप से संशोधित नाम पहचानेंगे और उनके दूरस्थ संदर्भ को परिवर्तित करेंगे। इसके बाद (या इससे पहले) आप शाखा के स्थानीय नाम को भी संशोधित कर सकते हैं।

व्हाट अबाउट:

 git checkout old-branch-name git push remote-name new-branch-name git push remote-name :old-branch-name git branch -m new-branch-name 

ठीक है , स्थानीय और दूरस्थ दोनों पर एक शाखा का नाम बदलना बहुत आसान है! …

यदि आप शाखा में हैं, तो आप ऐसा कर सकते हैं:

git branch -m <branch>

या यदि नहीं, तो आपको करने की आवश्यकता है:

git branch -m <your_old_branch> <your_new_branch>

उसके बाद, इस तरह के रिमोट को हटा दें:

git push origin <your_old_branch>

अब आपने किया है, अगर आपको धक्का देने की कोशिश करते समय अपस्ट्रीम त्रुटि मिलती है, तो बस करें:

git push --set-upstream origin <your_new_branch>

मैं वास्तविक कमांड लाइन में चरणों को दिखाने के लिए नीचे की छवि भी बनाऊँ, बस चरणों का पालन करें और आप अच्छा होंगे:

यहां छवि विवरण दर्ज करें

आप निम्न कार्य कर सकते हैं:

 git -m master master-old #rename current master git checkout -b master #create a new branch master git push -f origin master #force push to master 

लेकिन बल को बल देना एक बुरा विचार है यदि अन्य लोग इस भंडार को साझा कर रहे हैं। फोर्स पुश के कारण उनके पुनरीक्षण इतिहास का एक नया विवाद होगा।

मेरा मानना ​​है कि कुंजी यह प्राप्ति है कि आप दोहरा नामों का प्रदर्शन कर रहे हैं: master-old और master-new

अन्य सभी उत्तरों से मैंने इसे संश्लेषित किया है:

 doublerename master-new master master-old 

जहां हमें पहली बार doublerename बैश फ़ंक्शन को परिभाषित करना है:

 # doublerename NEW CURRENT OLD # - arguments are branch names # - see COMMIT_MESSAGE below # - the result is pushed to origin, with upstream tracking info updated doublerename() { local NEW=$1 local CUR=$2 local OLD=$3 local COMMIT_MESSAGE="Double rename: $NEW -> $CUR -> $OLD. This commit replaces the contents of '$CUR' with the contents of '$NEW'. The old contents of '$CUR' now lives in '$OLD'. The name '$NEW' will be deleted. This way the public history of '$CUR' is not rewritten and clients do not have to perform a Rebase Recovery. " git branch --move $CUR $OLD git branch --move $NEW $CUR git checkout $CUR git merge -s ours $OLD -m $COMMIT_MESSAGE git push --set-upstream --atomic origin $OLD $CUR :$NEW } 

यह एक इतिहास में बदलते हुए git rebase है, जिसमें शाखा सामग्री काफी भिन्न है, लेकिन यह अलग है कि ग्राहक अभी भी git pull master साथ सुरक्षित रूप से तेजी से आगे बढ़ सकते हैं।

 git update-ref newref oldref git update-ref -d oldref newref