git - गिट रिमोट शाखा लाओ
branch git-branch (16)
मेरे सहयोगी और मैं एक ही भंडार पर काम कर रहे हैं, हमने इसे विभिन्न परियोजनाओं के लिए तकनीकी रूप से दो शाखाओं में बांटा है, लेकिन उनके पास समानताएं हैं इसलिए हम कभी-कभी शाखा से * मास्टर को वापस लेना चाहते हैं।
हालांकि, मेरे पास शाखा है, मेरे सहयोगी विशेष रूप से उस शाखा को कैसे खींच सकते हैं। रेपो का एक git clone
स्थानीय रूप से शाखाओं को बनाने के लिए प्रतीत नहीं होता है, हालांकि मैं उन्हें अपने अंत में धक्का देने के बाद अस्पष्ट पर रह सकता हूं।
इसके अलावा, जब मैंने मूल रूप से शाखा बनाई तो मैंने -b checkout
। यकीन नहीं है कि इससे बहुत अंतर आता है?
iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master
git fetch origin discover
git checkout discover
यह वह आदेश है जो मैंने भाग लिया था। लेकिन निश्चित रूप से काम नहीं कर रहा है। मैं उस शाखा को जांचने में सक्षम होना चाहता हूं और फिर उन पुशों को वापस धक्का देना चाहता हूं जो कि विभिन्न सहयोगियों या कार्यस्थानों से शाखाएं बदलती हैं।
Mybranch को चेकआउट करने के लिए जो दूरस्थ रूप से मौजूद है और स्थानीय रूप से नहीं - यह मेरे लिए काम करता है:
git fetch --all
git checkout myBranch
मुझे यह संदेश मिला:
Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'
अपने .git/config
जांच करें, उस रिमोट के लिए लाने पर कौन सी ट्रैकिंग मौजूद है।
[remote "randomRemote"]
url = [email protected]:someUser/someRepo.git
fetch = +refs/heads/*:refs/remotes/randomRemote/*
यदि उसके पास randomRemote/*
को इंगित करने वाले randomRemote/*
, तो जब आप git fetch randomRemote
, तो यह सभी शाखाएं git fetch randomRemote
। फिर आप उस शाखा को चेकआउट कर सकते हैं।
अन्यथा,
इसका उपयोग करके ट्रैकिंग में दूरस्थ शाखाएं जोड़ने की आवश्यकता है। इसे चलाने के बाद अपने
.git/config
जांच करें। तुम समझ जाअोगे। गिट रिमोट सेट-शाखाएं - यादृच्छिक याद रखें यादृच्छिक ब्रैंचरन
git fetch randomRemote
। यह रिमोट शाखा लाएगा।अब आप
git checkout randomBranch
चला सकते हैं
आप रिमोट शाखा को एक शॉट में भी ला सकते हैं और चेकआउट कर सकते हैं: -
git fetch && git checkout the-branch-name
आपको एक स्थानीय शाखा बनाने की जरूरत है जो एक दूरस्थ शाखा को ट्रैक करता है। निम्न आदेश दूरस्थ शाखा मूल / daves_branch को ट्रैक करते हुए daves_branch नाम की एक स्थानीय शाखा बनाएगा । जब आप अपने परिवर्तनों को दबाते हैं तो दूरस्थ शाखा अपडेट हो जाएगी।
गिट के अधिकांश संस्करणों के लिए:
git checkout --track origin/daves_branch
--track
git checkout -b [branch] [remotename]/[branch]
शॉर्टेंड है जहां [रिमोटनाम] इस मामले में मूल है और [शाखा] इस मामले में दो बार समान है, daves_branch ।
गिट 1.5.6.5 के लिए आपको इसकी आवश्यकता है:
git checkout --track -b daves_branch origin/daves_branch
गिट 1.7.2.3 और उच्चतम के लिए यह पर्याप्त है (शायद पहले शुरू हो सकता है लेकिन यह सबसे पुरानी पुष्टि है जिसे मैं जल्दी से पा सकता हूं):
git checkout daves_branch
ध्यान दें कि हाल के गिट संस्करणों के साथ, यह आदेश स्थानीय शाखा नहीं बनाएगा और आपको 'अलग-अलग सिर' स्थिति में डाल देगा। यदि आप एक स्थानीय शाखा चाहते हैं, तो --track
विकल्प का उपयोग करें। यहां पूरा विवरण: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches
एक साधारण कमांड - "गिट चेकआउट remote_branch_name" आपको स्थानीय शाखा बनाने में मदद करेगा जिसमें रिमोट शाखा में सभी बदलाव हैं।
कभी-कभी आपको मास्टर शाखा के साथ झुकाव नहीं करने के लिए कहा जाता है और केवल रिमोट शाखा (जैसा कि मुझसे पूछा गया था) काम करता है। तो आपको केवल रिमोट शाखा की जरूरत है।
तो अकेले रिमोट शाखा क्लोन करने के लिए (मास्टर के बिना), ऐसा करें
git clone url --branch remote_branch_name
जहां, remote_branch_name दूरस्थ शाखा का नाम है
उदाहरण के लिए,
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15
यह सुनिश्चित करेगा कि आप रिमोट शाखा को रिमोट शाखा के नाम से अपनी स्थानीय शाखा में क्लोन करें।
अब यदि आप अपना कोड और पुश करते हैं, तो कोड अकेले उस शाखा में जमा किया जाएगा।
निम्नानुसार कदम हैं;
git fetch origin
याgit fetch --all
, यह सभी दूरस्थ शाखाओं को आपके स्थानीय में लाएगा और फिर यह दूसरा विकल्प होगा जिसके साथ आप प्रक्रिया कर सकते हैं।git checkout --track origin/<The_remote_branch you want to switch over>
फिर इस शाखा पर काम करें और आप यह सत्यापित कर सकते हैं कि आप उस शाखा में हैं या नहीं
git branch
यह उस शाखा को प्रदर्शित करता है जिसमें आप वर्तमान में हैं।
बस कोशिश करो
$ git पुल उत्पत्ति your_branch_name
मैंने checkout
बाद fetch
उपयोग किया है ...
git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>
... जहां <rbranch>
रिमोट शाखा या स्रोत रेफरी है और <lbranch>
अभी तक मौजूद गैर-मौजूदा स्थानीय शाखा या गंतव्य रेफरी है जिसे आप ट्रैक करना चाहते हैं और जिसे आप शायद दूरस्थ शाखा या स्रोत रेफरी के रूप में नामित करना चाहते हैं । यह <refspec>
के स्पष्टीकरण में options तहत समझाया गया है।
गिट इतना स्मार्ट है कि अगर मैं रिमोट शाखा के पहले कुछ अक्षरों के बाद टैब करता हूं तो ऑटो पहले कमांड को पूरा करता है। आईई: मुझे स्थानीय शाखा का नाम भी नहीं देना है, गिट स्वचालित रूप से मेरे लिए रिमोट शाखा का नाम कॉपी करता है। धन्यवाद गिट!
इसके अलावा इस तरह के एसओ पोस्ट शो में जवाब , यदि आप स्थानीय शाखा का नाम नहीं लेते हैं, तो आप अभी भी इसे बना सकते हैं जब आप -b
ध्वज का उपयोग करके इसे चेक आउट करते हैं। आईई: git fetch <remote> <branch>
git checkout -b <branch> <remote>/<branch>
मेरे शुरुआती उत्तर के समान ही है। और जाहिर है कि यदि आपके रेपो में केवल एक रिमोट है, तो आप केवल git checkout <branch>
fetch
और यह आपके लिए एक स्थानीय शाखा बनायेगा। ईजी: आपने अभी एक रेपो क्लोन किया है और रिमोट से अतिरिक्त शाखाएं देखना चाहते हैं।
मेरा मानना है कि fetch
लिए कुछ दस्तावेज pull
से क्रियात्मक प्रतिलिपि बना सकते हैं। विशेष रूप से options में <refspec>
पर अनुभाग समान है। हालांकि, मुझे विश्वास नहीं है कि fetch
कभी merge
हो जाएगा, ताकि अगर आप कोलन के गंतव्य पक्ष को खाली छोड़ दें तो कुछ भी नहीं करना चाहिए ।
नोट: उस git fetch <remote> <refspec>
लिए छोटा है git fetch <remote> <refspec>:
जो कुछ भी नहीं करेगा, लेकिन git fetch <remote> <tag>
git fetch <remote> <tag>:<tag>
जो दूरस्थ <tag>
स्थानीय रूप से कॉपी करना चाहिए।
मुझे लगता है कि यह केवल सहायक है अगर आप स्थानीय रूप से रिमोट शाखा की प्रतिलिपि बनाना चाहते हैं, लेकिन जरूरी नहीं कि इसे तुरंत जांचें। अन्यथा अब मैं ऊपर दिए गए स्वीकृत उत्तर का उपयोग करूंगा, जिसे चेकआउट विवरण के पहले भाग में और बाद में options अनुभाग में विस्तार से समझाया गया है, क्योंकि यह 1-लाइनर है। खैर ... एक 1-लाइनर की तरह, क्योंकि आपको अभी भी git fetch <remote>
चलाना होगा।
<refspecs>
(स्रोत: गंतव्य) का आदेश रिमोट शाखाओं को हटाने के लिए विचित्र प्री गिट <refspecs>
विधि बताता है। आईई: गंतव्य refspec में कुछ भी पुश।
मैंने लिखा
git checkout <branch_name>
और पा लिया
Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'
यदि आप पहले से ही अपनी रिमोट शाखा को जानते हैं ...
git remote
=> One
=> Two
और आप उस शाखा का नाम जानते हैं जिसे आप चेकआउट करना चाहते हैं। br1.2.3.4 फिर करो
git fetch One
=> returns all meta data of remote i.e. the branch name in question.
जो कुछ बचा है वह शाखा की जांच करना है
git checkout br.1.2.3.4
फिर इससे कोई नई शाखाएं बंद करें।
यदि आपके पास एक रिपोजिटरी है जिसे क्लैथ 1 के साथ क्लोन किया गया था तो सूचीबद्ध किए गए कई आदेश काम नहीं करेंगे। उदाहरण के लिए यहां देखें
% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
* branch other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%
इस मामले में मैं रेपो को दोबारा शुरू कर दूंगा, लेकिन शायद अन्य तकनीकें हैं जैसे गिट उथले क्लोन (क्लोन - डेपथ) दूरस्थ शाखाओं को याद करती है
git branch <name> --track origin/<name>
git fetch && git checkout <your friend's branch name>
चाल चलाना चाहिए
शीर्षक और सवाल उलझन में हैं:
- गिट रिमोट शाखा लाओ
- मेरे सहयोगी विशेष रूप से उस शाखा को कैसे खींच सकते हैं।
यदि सवाल यह है कि रिमोट शाखा को चेकआउट करने के लिए रिमोट ब्रांच कैसे मिल सकती है या कैसे एक आसान समाधान है:
गिट (> = 1.6.6) के साथ आप उपयोग करने में सक्षम हैं:
git checkout <branch_name>
यदि स्थानीय <branch_name>
नहीं मिला है लेकिन मिलान करने वाले नाम के साथ बिल्कुल एक रिमोट में एक ट्रैकिंग शाखा मौजूद है, तो इसके बराबर व्यवहार करें:
git checkout -b <branch_name> --track <remote>/<branch_name>
अपने दोस्त के लिए:
$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
git checkout -b serverfix origin/serverfix
यह एक आम पर्याप्त ऑपरेशन है कि गिट --ट्रैक शॉर्टेंड प्रदान करता है:
git checkout --track origin/serverfix
वास्तव में, यह इतना आम है कि उस शॉर्टकट के लिए भी एक शॉर्टकट है। यदि शाखा नाम जिसे आप चेकआउट (ए) की कोशिश कर रहे हैं, अस्तित्व में नहीं है और (बी) केवल एक रिमोट पर किसी नाम से मेल खाता है, तो गिट आपके लिए एक ट्रैकिंग शाखा तैयार करेगा:
git checkout serverfix
दूरस्थ शाखा की तुलना में एक अलग नाम के साथ एक स्थानीय शाखा स्थापित करने के लिए, आप आसानी से एक अलग स्थानीय शाखा नाम के साथ पहले संस्करण का उपयोग कर सकते हैं:
git checkout -b sf origin/serverfix
अब, आपकी स्थानीय शाखा एसएफ स्वचालित रूप से मूल / सर्वरफिक्स से खींच जाएगी।
स्रोत: स्कॉट चकॉन और बेन स्ट्रॉब द्वारा लिखित प्रो गिट द्वितीय संस्करण (पठनीयता के लिए कटौती)