git - आप हमेशा एक विशिष्ट शाखा से खींचने के लिए गिट कैसे प्राप्त करते हैं?




version-control (6)

मैं एक गिट मास्टर नहीं हूं, लेकिन मैं कई अलग-अलग परियोजनाओं के साथ अब कुछ समय से इसके साथ काम कर रहा हूं। प्रत्येक प्रोजेक्ट में, मैं हमेशा git clone [repository] हूं और उस बिंदु से, हमेशा git pull , जब तक मेरे पास बकाया परिवर्तन नहीं होते हैं।

हाल ही में, मुझे पिछली शाखा में वापस जाना पड़ा, और git checkout 4f82a29 साथ ऐसा किया। जब मैं फिर से खींचने के लिए तैयार था, मैंने पाया कि मुझे अपनी शाखा को वापस मास्टर में रखना था। अब, मैं सीधे git pull पुल का उपयोग नहीं कर सकता लेकिन इसके बजाय, git pull origin master को निर्दिष्ट git pull origin master , जो परेशान है, और मुझे इंगित करता है कि मैं पूरी तरह से समझ नहीं पा रहा हूं कि क्या हो रहा है।

क्या बदल गया है जो मुझे मूल मास्टर निर्दिष्ट किए बिना सीधे git pull करने की अनुमति नहीं देता है, और मैं इसे वापस कैसे बदलूं?

अद्यतन करें:

-bash-3.1$ cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[branch "master"]
[remote "origin"]
    url = [email protected]:user/project.git
    fetch = refs/heads/*:refs/remotes/origin/*

अद्यतन 2: स्पष्ट होने के लिए, मैं समझता हूं कि मेरी मूल विधि गलत हो सकती है, लेकिन मुझे इस रेपो को ठीक करने की आवश्यकता है ताकि मैं फिर से git pull उपयोग कर git pull । वर्तमान में, गिट खींचने के परिणाम:

-bash-3.1$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either.  Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull  ').
See git-pull(1) for details on the refspec.

If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:

    branch.master.remote = 
    branch.master.merge = 
    remote..url = 
    remote..fetch = 

See git-config(1) for details.

मैं git pull सकता हूं कि कौन सी शाखा मर्ज करने के लिए है, और यह सही तरीके से काम करती है, लेकिन git pull काम नहीं करता है क्योंकि यह मूल रूप से मेरे git checkout से पहले हुआ था।


गिट को कॉन्फ़िगर करने का एक तरीका भी है, यह हमेशा काम करने वाली प्रतिलिपि में देखे गए शाखा में समतुल्य दूरस्थ शाखा को खींचता है और धक्का देता है। इसे एक ट्रैकिंग शाखा कहा जाता है जो गिट तैयार डिफ़ॉल्ट रूप से सेटिंग की सिफारिश करता है

वर्तमान कार्य निर्देशिका के ऊपर अगले भंडार के लिए:

git config branch.autosetupmerge true

सभी गिट भंडारों के लिए, जो अन्यथा कॉन्फ़िगर नहीं हैं:

git config --global branch.autosetupmerge true

जादू की तरह, आईएमएचओ लेकिन इससे उन मामलों में मदद मिल सकती है जहां विशिष्ट शाखा हमेशा चालू शाखा होती है

जब आपके पास branch.autosetupmerge हो branch.autosetupmerge true सेट हो और पहली बार शाखा चेकआउट करें, तो गिट आपको संबंधित दूरस्थ शाखा को ट्रैक करने के बारे में बताएगा:

(master)$ git checkout gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

फिर गिट स्वचालित रूप से उस संबंधित शाखा को दबाएगा:

(gh-pages)$ git push
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 1003 bytes, done.
Total 6 (delta 2), reused 0 (delta 0)
To [email protected]:bigben87/webbit.git
   1bf578c..268fb60  gh-pages -> gh-pages

मास्टर को खींचने के तरीके के बारे में आपका तत्काल प्रश्न, आपको जो कुछ भी कहना है, उसे करने की ज़रूरत है। अपनी शाखा कॉन्फ़िगरेशन से खींचने के लिए refspec निर्दिष्ट करें।

[branch "master"]
    merge = refs/heads/master

मेरी गिट कॉन्फ़िगरेशन फ़ाइल को संपादित नहीं करना चाहता, मैंने @ मिपाडी की पोस्ट में जानकारी का पालन किया और उपयोग किया:

$ git pull origin master

यदि आप चाहें, तो आप इन विकल्पों को कमांड लाइन (कॉन्फ़िगरेशन फ़ाइल को संपादित करने के बजाय) के माध्यम से सेट कर सकते हैं:

  $ git config branch.master.remote origin
  $ git config branch.master.merge refs/heads/master

या, यदि आप मेरे जैसे हैं, और चाहते हैं कि यह आपकी सभी परियोजनाओं में डिफ़ॉल्ट हो, जिसमें आप भविष्य में काम कर सकें, फिर इसे वैश्विक कॉन्फ़िगरेशन सेटिंग के रूप में जोड़ें:

  $ git config --global branch.master.remote origin
  $ git config --global branch.master.merge refs/heads/master

[branch "master"] तहत, रेपो की गिट कॉन्फ़िगरेशन फ़ाइल ( .git/config ) में निम्न जोड़ने का प्रयास करें:

[branch "master"]
    remote = origin
    merge = refs/heads/master

यह गिट 2 चीजें बताता है:

  1. जब आप मास्टर शाखा पर हों, तो डिफ़ॉल्ट रिमोट मूल है।
  2. मास्टर शाखा पर git pull का उपयोग करते समय, कोई दूरस्थ और शाखा निर्दिष्ट नहीं है, डिफ़ॉल्ट दूरस्थ (मूल) का उपयोग करें और दूरस्थ मास्टर शाखा से परिवर्तन में विलय करें।

मुझे यकीन नहीं है कि यह सेटअप आपके कॉन्फ़िगरेशन से क्यों हटा दिया गया होगा, हालांकि। आपको उन सुझावों का पालन करना पड़ सकता है जिन्हें अन्य लोगों ने भी पोस्ट किया है, लेकिन यह काम कर सकता है (या कम से कम मदद)।

यदि आप हाथ से कॉन्फ़िगरेशन फ़ाइल को संपादित नहीं करना चाहते हैं, तो आप इसके बजाय कमांड-लाइन टूल का उपयोग कर सकते हैं:

$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master

git branch --set-upstream master origin/master

यह आपकी config फ़ाइल में निम्न जानकारी जोड़ देगा:

[branch "master"]
    remote = origin
    merge = refs/heads/master

यदि आपके पास branch.autosetuprebase = always है branch.autosetuprebase = always तब यह भी जोड़ देगा:

    rebase = true






version-control