git - मैं रिमोट गिट शाखा कैसे देखूं?



git-checkout remote-branch (22)

किसी ने एक साझा भंडार में git push origin test साथ test नामक एक शाखा को धक्का दिया। मैं git branch -r साथ शाखा देख सकता git branch -r

अब मैं रिमोट test शाखा की जांच करने की कोशिश कर रहा हूं।

मैंने कोशिश की:

  • git checkout test जो कुछ भी नहीं करता है

  • git checkout origin/test देता है * (no branch) । जो भ्रमित है। मैं "शाखा नहीं" कैसे हो सकता हूं?

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


Answers

इस मामले में, आप शायद एक स्थानीय test शाखा बनाना चाहते हैं जो रिमोट test शाखा को ट्रैक कर रही है:

$ git branch test origin/test

git पुराने संस्करणों में, आपको एक स्पष्ट --track विकल्प की आवश्यकता --track है, लेकिन जब आप रिमोट शाखा को बंद कर रहे हैं तो यह डिफ़ॉल्ट है।


यदि शाखा origin रिमोट के अलावा किसी अन्य चीज़ पर है तो मुझे निम्न कार्य करना पसंद है:

$ git fetch
$ git checkout -b second/next upstream/next

यह upstream रिमोट पर next शाखा को second/next नामक स्थानीय शाखा में चेकआउट करेगा। जिसका अर्थ है कि यदि आपके पास पहले से ही एक स्थानीय शाखा है, तो यह संघर्ष नहीं करेगा।

$ git branch -a
* second/next
  remotes/origin/next
  remotes/upstream/next

आप निम्न बैश स्क्रिप्ट के साथ सभी दूरस्थ शाखाओं को ट्रैक करना शुरू कर सकते हैं:

#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`
  do git branch -f --track "$branch" "origin/$branch"
done

यहां एक सिंगल-लाइन संस्करण भी है:

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;

मैं error: pathspec 'desired-branch' did not match any file(s) known to git. देखने में एक स्थिति में फंस गया था error: pathspec 'desired-branch' did not match any file(s) known to git. उपरोक्त सभी सुझावों के लिए। मैं गिट संस्करण 1.8.3.1 पर हूं।

तो यह मेरे लिए काम किया :

git fetch origin && git checkout branch_name 

पीछे स्पष्टीकरण यह है कि मैंने देखा है कि रिमोट शाखा लाने पर, इसे FETCH_HEAD पर लाया गया था:

git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD

अद्यतन करें

जैकब का जवाब वास्तव में इस पर सुधार करता है। गिट संस्करण ≥ 1.6.6 के साथ, केवल एक रिमोट के साथ, आप बस कर सकते हैं:

git fetch
git checkout test

चूंकि उपयोगकर्ता मसूकोमी एक टिप्पणी में बताते हैं, यदि आपके पास एकाधिक रिमोट हैं तो git checkout test आधुनिक गिट में काम नहीं करेगा। इस मामले में उपयोग करें

git checkout -b test <name of remote>/test

पुराना उत्तर

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

शाखा लाने के लिए, आपको बस इसकी आवश्यकता है:

git fetch origin

यह आपके लिए सभी रिमोट शाखाएं लाएगा। आप चेकआउट के लिए उपलब्ध शाखाएं देख सकते हैं:

git branch -v -a

हाथ में रिमोट शाखाओं के साथ, अब आपको उस शाखा की जांच करनी होगी जिसमें आप रुचि रखते हैं, आपको स्थानीय कामकाजी प्रतिलिपि देते हुए:

git checkout -b test origin/test

अन्य लोग और gals समाधान देते हैं, लेकिन शायद मैं आपको बता सकता हूँ क्यों।

गिट चेकआउट परीक्षण जो कुछ भी नहीं करता है

Does nothing बराबर doesn't work , इसलिए मुझे लगता है कि जब आप अपने टर्मिनल में 'गिट चेकआउट टेस्ट' टाइप करते हैं और एंटर कुंजी दबाते हैं, तो कोई संदेश नहीं दिखाई देता है और कोई त्रुटि नहीं होती है। क्या मैं सही हू?

अगर उत्तर 'हां' है, तो मैं आपको कारण बता सकता हूं।

कारण यह है कि आपके काम के पेड़ में 'test' नाम की एक फ़ाइल (या फ़ोल्डर) है।

जब git checkout xxx पार्स किया गया,

  1. गिट पहली बार शाखा नाम के रूप में xxx पर दिखता है, लेकिन परीक्षण नाम की कोई शाखा नहीं है।
  2. फिर गिट सोचता है कि xxx एक रास्ता है, और सौभाग्य से (या दुर्भाग्य से), परीक्षण नाम की एक फ़ाइल है। तो git checkout xxx अर्थ xxx फ़ाइल में किसी भी संशोधन को त्यागना है।
  3. अगर xxx नाम की फ़ाइल नहीं है, तो गिट कुछ नियमों के अनुसार xxx बनाने का प्रयास करेगा। नियमों में से एक xxx नामक शाखा बना रहा है यदि remotes/origin/xxx मौजूद है।

git fetch && git checkout your-branch-name


ठीक है , जवाब आसान है ... आप मूल रूप से शाखा देखते हैं, लेकिन आपके पास अभी तक एक स्थानीय प्रति नहीं है! ...

आपको शाखा fetch की जरूरत है ...

आप बस शाखा में चेकआउट कर सकते हैं और फिर चेकआउट कर सकते हैं, ऐसा करने के लिए नीचे एक पंक्ति कमांड का उपयोग करें:

git fetch && git checkout test

मैंने मतभेदों को साझा करने के लिए नीचे दी गई छवि भी बनाई है, देखें कि कैसे कार्य करता है और यह pull लिए अलग pull :


रिमोट शाखा के नाम से बस git checkout चलाएं। गिट स्वचालित रूप से एक स्थानीय शाखा बना देगा जो रिमोट को ट्रैक करता है:

git fetch
git checkout test

हालांकि, अगर वह शाखा नाम एक से अधिक रिमोट में पाया जाता है, तो यह काम नहीं करेगा क्योंकि गिट को यह नहीं पता कि किस का उपयोग करना है। उस स्थिति में आप या तो उपयोग कर सकते हैं:

git checkout --track origin/test

या

git checkout -b test origin/test

2.19 9 में, गिट ने checkout.defaultRemote कॉन्फ़िगरेशन सीखा, जो इस तरह की अस्पष्टता को हल करते समय डिफ़ॉल्ट रूप से दूरस्थ को निर्दिष्ट करता है।


सबसे पहले, आपको करने की ज़रूरत है:

git fetch # यदि आप शाखा के नाम के बारे में नहीं जानते हैं

git fetch origin branch_name

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

git checkout -b branch_name origin/branch_name

-b आपके चयनित रिमोट शाखा से निर्दिष्ट नाम में नई शाखा तैयार करेगा।


स्वीकृत उत्तर आपके लिए काम नहीं कर रहा है?

जबकि पहला और चयनित उत्तर तकनीकी रूप से सही है , वहीं संभावना है कि आपने अभी तक सभी ऑब्जेक्ट्स को पुनर्प्राप्त नहीं किया है और रिमोट रिपोजिटरी से रीफ्रेश किया है। यदि ऐसा है, तो आपको निम्न त्रुटि प्राप्त होगी:

$ git checkout -b remote_branch origin/remote_branch

घातक: गिट चेकआउट: पथ अपडेट करना शाखाओं के साथ असंगत है।
क्या आप 'मूल / remote_branch' चेकआउट करना चाहते हैं जिसे प्रतिबद्ध के रूप में हल नहीं किया जा सकता है?

उपाय

अगर आपको यह संदेश प्राप्त होता है, तो आपको सबसे पहले git fetch origin जहां git checkout remote_branch चलाने से पहले origin रिमोट रिपोजिटरी का नाम है। प्रतिक्रियाओं के साथ एक पूर्ण उदाहरण यहां दिया गया है:

$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> origin/develop
 * [new branch]      demo       -> origin/demo
   d80f8d7..359eab0  master     -> origin/master

$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'

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


खाली फ़ोल्डर बनाने के लिए कृपया कमांड का पालन करें। इसे दर्ज करें और इस कमांड का उपयोग करें:

saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin.
Switched to a new branch '1_4_0_content_discovery'

तुम कोशिश कर सकते हो

git fetch remote
git checkout --track -b local_branch_name origin/branch_name

या

git fetch
git checkout -b local_branch_name origin/branch_name

Sidenote: आधुनिक गिट (> = 1.6.6 ) के साथ, आप बस उपयोग करने में सक्षम हैं

git checkout test

(ध्यान दें कि यह 'परीक्षण' नहीं है 'उत्पत्ति / परीक्षण') जादुई DWIM -मेरी करने के लिए और आपके लिए स्थानीय शाखा 'टेस्ट' बनाएं, जिसके लिए अपस्ट्रीम रिमोट-ट्रैकिंग शाखा 'मूल / परीक्षण' होगी।

git branch उत्पादन में * (no branch) का अर्थ है कि आप अज्ञात शाखा पर हैं, तथाकथित "अलग सिर" राज्य (सिर बिंदु सीधे करने के लिए, और कुछ स्थानीय शाखा के लिए प्रतीकात्मक संदर्भ नहीं है)। यदि आपने इस अनाम शाखा पर कुछ काम किया है, तो आप हमेशा मौजूदा प्रतिबद्धता से स्थानीय शाखा बना सकते हैं:

git checkout -b test HEAD

एक गिट भंडार क्लोन करने के लिए, करें:

git clone <either ssh url /http url>

उपरोक्त आदेश सभी शाखाओं की जांच करता है, लेकिन केवल master शाखा शुरू की जाएगी। यदि आप अन्य शाखाओं को चेकआउट करना चाहते हैं, तो करें:

git checkout -t origin/future_branch (for example)

यह आदेश रिमोट शाखा की जांच करता है, और आपका स्थानीय शाखा नाम दूरस्थ शाखा के समान होगा।

यदि आप चेकआउट पर अपने स्थानीय शाखा नाम को ओवरराइड करना चाहते हैं:

git checkout -t -b enhancement origin/future_branch

अब आपकी स्थानीय शाखा का नाम future_branch है, लेकिन आपकी रिमोट शाखा का नाम future_branch

Documentation


इनमें से कोई भी जवाब मेरे लिए काम नहीं करता था। यह काम किया:

git checkout -b feature/branch remotes/origin/feature/branch


उपयोग:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

अन्य जवाब मेरे सौम्य मामले में आधुनिक गिट के साथ काम नहीं करते हैं। रिमोट शाखा नई है, तो आपको पहले खींचने की आवश्यकता हो सकती है, लेकिन मैंने उस मामले की जांच नहीं की है।


नव निर्मित शाखाएं प्राप्त करने के लिए

git fetch

दूसरी शाखा में स्विच करने के लिए

git checkout BranchName

आदेश

git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>

के बराबर हैं

 git fetch --all

और फिर

 git checkout -b fixes_for_dev origin/development

दोनों development से latest fixes_for_dev


मैंने उपर्युक्त समाधान की कोशिश की, लेकिन यह काम नहीं किया। इसे आज़माएं, यह काम करता है:

git fetch origin 'remote_branch':'local_branch_name'

यह रिमोट शाखा local_branch_name और local_branch_name नाम के साथ एक नई स्थानीय शाखा (यदि पहले से मौजूद नहीं है) local_branch_name और इसमें रिमोट को ट्रैक करेगा।


git remote show <origin name> कमांड सभी शाखाओं (अन-ट्रैक वाली शाखाओं सहित) सूचीबद्ध करेगा। फिर आप रिमोट शाखा नाम ढूंढ सकते हैं जिसे आपको लाने की आवश्यकता है।

उदाहरण:

$ git remote show origin

दूरस्थ शाखाएं लाने के लिए इन चरणों का उपयोग करें:

git fetch <origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)

उदाहरण:

$ git fetch origin test:test
$ git checkout test

संक्षिप्त उत्तर

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

रिमोट शाखा को हटाना:

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin :<branch>          # Git versions older than 1.7.0

स्थानीय शाखा को हटाना:

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches

स्थानीय रिमोट-ट्रैकिंग शाखा को हटाना:

git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter

git fetch <remote> --prune # Delete multiple obsolete tracking branches
git fetch <remote> -p      # Shorter

लंबा उत्तर: हटाने के लिए 3 अलग-अलग शाखाएं हैं!

जब आप स्थानीय रूप से और दूरस्थ रूप से शाखाओं को हटाने से निपट रहे हैं, तो ध्यान रखें कि इसमें 3 अलग-अलग शाखाएं शामिल हैं :

  1. स्थानीय शाखा X
  2. रिमोट मूल शाखा X
  3. रिमोट शाखा origin/X को ट्रैक करने वाली स्थानीय रिमोट-ट्रैकिंग शाखा origin/X X

मूल पोस्टर इस्तेमाल किया

git branch -rd origin/bugfix

जिसने केवल अपनी स्थानीय रिमोट-ट्रैकिंग शाखा origin/bugfix हटा दी, न कि origin पर वास्तविक रिमोट शाखा bugfix

उस वास्तविक रिमोट शाखा को हटाने के लिए , आपको चाहिए

git push origin --delete bugfix

अतिरिक्त जानकारिया

निम्नलिखित खंड आपके रिमोट और रिमोट-ट्रैकिंग शाखाओं को हटाने पर विचार करने के लिए अतिरिक्त विवरण का वर्णन करते हैं।

रिमोट शाखाओं को हटाने के लिए धक्का देना दूरस्थ ट्रैकिंग शाखाओं को भी हटा देता है

ध्यान दें कि git push का उपयोग कर कमांड लाइन से रिमोट शाखा X को हटाने से स्थानीय रिमोट-ट्रैकिंग शाखा origin/X भी हटा दिया जाएगा , इसलिए git fetch --prune या git fetch -p साथ अप्रचलित रिमोट-ट्रैकिंग शाखा को git fetch --prune आवश्यक नहीं है git fetch -p , हालांकि अगर आप इसे वैसे भी करते हैं तो इससे कोई git fetch -p नहीं होगी।

आप यह सत्यापित कर सकते हैं कि रिमोट-ट्रैकिंग शाखा origin/X को निम्न चलाकर भी हटा दिया गया था:

# View just remote-tracking branches
git branch --remotes
git branch -r

# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a

अप्रचलित स्थानीय रिमोट-ट्रैकिंग शाखा मूल / एक्स काटना

यदि आपने कमांड लाइन (जैसे ऊपर) से अपनी रिमोट शाखा X को हटाया नहीं है, तो आपके स्थानीय रेपो में अभी भी (अब अप्रचलित) रिमोट-ट्रैकिंग शाखा origin/X । ऐसा तब हो सकता है जब आपने गिटहब के वेब इंटरफेस के माध्यम से सीधे रिमोट शाखा हटा दी हो, उदाहरण के लिए।

इन अप्रचलित रिमोट-ट्रैकिंग शाखाओं को हटाने के लिए एक सामान्य तरीका (गिट संस्करण 1.6.6 के बाद से) बस --prune या छोटे- -p साथ git fetch को चलाने के git fetchध्यान दें कि यह किसी भी दूरस्थ शाखाओं के लिए सभी अप्रचलित स्थानीय रिमोट-ट्रैकिंग शाखाओं को हटा देता है जो अब दूरस्थ पर मौजूद नहीं हैं :

git fetch origin --prune
git fetch origin -p # Shorter

1.6.6 रिलीज नोट्स (जोर मेरा) से प्रासंगिक उद्धरण यहां दिया गया है:

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

अप्रचलित दूरस्थ ट्रैकिंग शाखाओं के लिए स्वचालित स्वचालित छंटनी के लिए वैकल्पिक

वैकल्पिक रूप से, git fetch -p माध्यम से अपनी अप्रचलित स्थानीय रिमोट-ट्रैकिंग शाखाओं को --remote के --remote , आप --remote या -r flags के साथ मैन्युअल रूप से शाखा (es) को मैन्युअल रूप से हटाकर अतिरिक्त नेटवर्क ऑपरेशन करने से बच सकते हैं :

git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter

यह भी देखें





git git-checkout remote-branch