यहाँ लंबे जवाब है।
दूरस्थ:
यदि आप सहयोगी रूप से Git का उपयोग कर रहे हैं, तो आपको संभवतः अन्य मशीनों या स्थानों के साथ अपने कमिट को सिंक करना होगा। प्रत्येक मशीन या स्थान को Git की शब्दावली में रिमोट कहा जाता है , और प्रत्येक में एक या अधिक शाखाएं हो सकती हैं। सबसे अधिक बार, आपके पास सिर्फ एक नाम होगा origin
। सभी रिमोट को सूचीबद्ध करने के लिए, रन करें git remote
:
$ git remote
bitbucket
origin
आप देख सकते हैं कि ये दूरस्थ नाम किन स्थानों के लिए शॉर्टकट हैं, जिन्हें चलाकर git remote -v
:
$ git remote -v
bitbucket git@bitbucket.org:flimm/example.git (fetch)
bitbucket git@bitbucket.org:flimm/example.git (push)
origin git@github.com:Flimm/example.git (fetch)
origin git@github.com:Flimm/example.git (push)
प्रत्येक रिमोट के नीचे एक निर्देशिका है git/refs/remotes/
:
$ ls -F .git/refs/remotes/
bitbucket/ origin/
आपकी मशीन पर शाखाएँ:
TLDR: आपकी स्थानीय मशीन पर, आपको तीन प्रकार की शाखाएँ मिली हैं: स्थानीय गैर-ट्रैकिंग शाखाएँ, स्थानीय ट्रैकिंग शाखाएँ और दूरस्थ ट्रैकिंग शाखाएँ। एक दूरस्थ मशीन पर, आपको सिर्फ एक प्रकार की शाखा मिली है।
1. स्थानीय शाखाएँ
आप अपनी मशीन पर सभी स्थानीय शाखाओं की एक सूची देख सकते हैं git branch
:
$ git branch
master
new-feature
प्रत्येक स्थानीय शाखा में एक फ़ाइल है .git/refs/heads/
:
$ ls -F .git/refs/heads/
master new-feature
आपकी मशीन पर दो प्रकार की स्थानीय शाखाएँ होती हैं: स्थानीय शाखाओं पर नज़र रखना और स्थानीय शाखाओं पर नज़र रखना।
1.1 गैर-ट्रैकिंग स्थानीय शाखाएँ
गैर-ट्रैकिंग स्थानीय शाखाएं किसी अन्य शाखा से जुड़ी नहीं हैं। तुम दौड़कर एक पैदा करते हो git branch <branchname>
।
1.2। स्थानीय शाखाओं पर नज़र रखना
ट्रैकिंग स्थानीय शाखाएं एक अन्य शाखा से जुड़ी होती हैं, आमतौर पर एक रिमोट-ट्रैकिंग शाखा। तुम दौड़कर एक पैदा करते हो git branch --track <branchname> [<start-point>]
।
आप यह देख सकते हैं कि आपकी कौन सी स्थानीय शाखा शाखाओं का उपयोग करके ट्रैकिंग कर रही है git branch -vv
:
$ git branch -vv
master b31f87c85 [origin/master] Example commit message
new-feature b760e04ed Another example commit message
इस कमांड के आउटपुट से, आप देख सकते हैं कि स्थानीय शाखा master
रिमोट-ट्रैकिंग शाखा को ट्रैक कर रही है origin/master
, और स्थानीय शाखा new-feature
कुछ भी ट्रैक नहीं कर रही है।
यह देखने के लिए कि शाखाओं को ट्रैक करने वाली शाखाएं देखने का एक और तरीका है .git/config
।
स्थानीय शाखाओं को ट्रैक करना उपयोगी है। वे आपको चलाने की अनुमति देते हैं git pull
और git push
, यह निर्दिष्ट किए बिना कि कौन सी अपस्ट्रीम शाखा का उपयोग करना है। यदि शाखा किसी अन्य शाखा को ट्रैक करने के लिए सेट नहीं है, तो आपको इस तरह एक त्रुटि मिलेगी:
$ git checkout new-feature
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream new-feature <remote>/<branch>
2. रिमोट-ट्रैकिंग शाखाएं (अभी भी आपकी मशीन पर)
आप अपनी मशीन पर सभी दूरस्थ-ट्रैकिंग शाखाओं की सूची चलाकर देख सकते हैं git branch -r
:
$ git branch -r
bitbucket/master
origin/master
origin/new-branch
प्रत्येक दूरस्थ ट्रैकिंग शाखा में एक फ़ाइल है .git/refs/<remote>/
:
$ tree -F .git/refs/remotes/
.git/refs/remotes/
├── bitbucket/
│ └── master
└── origin/
├── master
└── new-branch
अपनी दूरस्थ-ट्रैकिंग शाखाओं के बारे में सोचें कि आपके स्थानीय कैश के लिए दूरस्थ मशीनें क्या हैं। आप अपनी रिमोट-ट्रैकिंग शाखाओं का उपयोग करके अपडेट कर सकते हैं git fetch
, जो git pull
पर्दे के पीछे का उपयोग करता है।
भले ही रिमोट-ट्रैकिंग शाखा का सारा डेटा आपकी मशीन पर (कैश की तरह) स्थानीय रूप से संग्रहीत हो, फिर भी इसे कभी भी स्थानीय शाखा नहीं कहा जाता है। (कम से कम, मैं इसे नहीं कहूंगा!) इसे सिर्फ एक रिमोट-ट्रैकिंग शाखा कहा जाता है।
दूरस्थ मशीन पर शाखाएँ:
आप सभी दूरस्थ शाखाओं को देख सकते हैं (यानी, रिमोट मशीन की शाखाएँ), दौड़कर git remote show <remote>
:
$ git remote show origin
* remote origin
Fetch URL: git@github.com:Flimm/example.git
Push URL: git@github.com:Flimm/example.git
HEAD branch: master
Remote branches:
io-socket-ip new (next fetch will store in remotes/origin)
master tracked
new-branch tracked
Local ref configured for 'git pull':
master merges with remote master
new-branch merges with remote new-branch
Local ref configured for 'git push':
master pushes to master (up to date)
new-branch pushes to new-branch (fast-forwardable)
यह git remote
कमांड नेटवर्क पर रिमोट मशीन से उसकी शाखाओं के बारे में पूछताछ करता है। यह आपके स्थानीय मशीन, उपयोग git fetch
या उसके git pull
लिए रिमोट-ट्रैकिंग शाखाओं को अपडेट नहीं करता है।
आउटपुट से, आप उन सभी शाखाओं को देख सकते हैं जो रिमोट मशीन पर "हेडिंग ब्रांच" ("स्टेल" के रूप में चिह्नित लाइनों को अनदेखा करें) के नीचे देखकर मौजूद हैं।
यदि आप दूरस्थ मशीन में लॉग इन कर सकते हैं और फाइलसिस्टम में रिपॉजिटरी पा सकते हैं, तो आप इसकी सभी शाखाओं पर एक नज़र डाल सकते हैं refs/heads/
।
प्रवंचक पत्रक:
किसी स्थानीय शाखा को हटाने के लिए, चाहे वह ट्रैकिंग हो या गैर-ट्रैकिंग, सुरक्षित रूप से:
git branch -d <branchname>
किसी स्थानीय शाखा को हटाने के लिए, चाहे ट्रैकिंग हो या गैर-ट्रैकिंग, जबरदस्ती:
git branch -D <branchname>
दूरस्थ ट्रैकिंग शाखा को हटाने के लिए:
git branch -rd <remote>/<branchname>
एक नई स्थानीय गैर-ट्रैकिंग शाखा बनाने के लिए:
git branch <branchname> [<start-point>]
एक नई स्थानीय ट्रैकिंग शाखा बनाने के लिए: (ध्यान दें कि यदि <start-point>
निर्दिष्ट किया गया है और एक दूरस्थ-ट्रैकिंग शाखा है जैसे origin/foobar
, तो --track
ध्वज स्वचालित रूप से शामिल है)
git branch --track <branchname> [<start-point]
उदाहरण:
git branch --track hello-kitty origin/hello-kitty
किसी दूरस्थ मशीन पर शाखा हटाने के लिए:
git push --delete <remote> <branchname>
सभी दूरस्थ-ट्रैकिंग शाखाएँ, जो बासी हैं, को हटाने के लिए, जहाँ रिमोट मशीन पर संबंधित शाखाएँ मौजूद नहीं हैं:
git remote prune <remote>
आपने देखा होगा कि कुछ कमांड में, आप का उपयोग करते हैं <remote>/<branch>
, और अन्य कमांड <remote> <branch>
,। उदाहरण: git branch origin/hello-kitty
और git push --delete origin hello-kitty
।
यह मनमाना लग सकता है, लेकिन यह याद रखने का एक सरल तरीका है कि स्लैश का उपयोग कब करें और अंतरिक्ष का उपयोग कब करें। जब आप एक स्लैश का उपयोग कर रहे हैं, तो आप अपनी मशीन पर रिमोट-ट्रैकिंग शाखा का उल्लेख कर रहे हैं, जबकि जब आप एक स्थान का उपयोग कर रहे होते हैं, तो आप वास्तव में नेटवर्क पर एक रिमोट मशीन पर एक शाखा के साथ काम कर रहे होते हैं।