2011-02-28 7 views
22

हम एक ही रिमोट रिपोजिटरी के मॉडल के साथ काम कर रहे हैं जो हम सभी का उपयोग करते हैं। हम नई सुविधाओं के लिए शाखा बनाते हैं और एक ट्रंक शाखा में फिर से बढ़ते हैं। हमारा वर्कफ़्लो यह है कि हमें ट्रंक से एकीकृत होने पर हमारी कार्यशील शाखाओं में ट्रंक से एकीकृत होना चाहिए।मैं गिट में अन्य ट्रैकिंग शाखाओं को तेजी से कैसे आगे बढ़ा सकता हूं?

इस प्रकार, यह हमें क्या करना के लिए असामान्य नहीं है:

(branch) $ git commit -a -m"blah blah blah" 
(branch) $ git fetch # origin/trunk is updated 
(branch) $ git checkout trunk 
(trunk) $ git pull # trunk is fast-forwarded to current version of origin/trunk. 
(trunk) $ git checkout branch 
(branch) $ git merge trunk 
(branch) $ git push 

मैं "Git चेकआउट ट्रंक/Git पुल/Git चेकआउट शाखा" चक्र पसंद नहीं है। यह आमतौर पर विजुअल स्टूडियो के साथ मिलकर शिकायत करता है कि मेरी सभी फाइलें और प्रोजेक्ट डिस्क पर बदल गए हैं, और इसे फिर से लोड करना चाहिए। दोनों चेकआउट के लिए। और खींचो। और विलय। विलय अपरिहार्य है, लेकिन गिट काम करने के कारण, यह वास्तव में इसे जांचने की आवश्यकता के बिना ट्रंक पर फास्ट-फॉरवर्ड करने में सक्षम होना चाहिए।

लेकिन मुझे आदेश नहीं पता, और मेरे google-foo ने मुझे इस पर असफल कर दिया है। किसी को पता है कैसे?

उत्तर

19

क्या आपको वास्तव में स्थानीय trunk शाखा अपडेट करने की आवश्यकता है?

बस fetch origin/trunk और merge यह सीधे उस शाखा में है जिस पर आप काम कर रहे हैं।
और यह Mark Longair की सलाह है: git: fetch and merge, don’t pull


Oliverhis answer में उल्लेख है (upvoted):

git fetch upstream trunk:trunk 

he comments के रूप में:

आप, मर्ज और बस तेजी से आगे छोड़ एक एक लाइनर का उपयोग कर सकते हैं।

यह दूरस्थ शाखा के हेड में स्थानीय शाखा trunk को तेजी से आगे बढ़ाता है।

देखें "git: update a local branch without checking it out?"

+7

:) मुझे कहना है कि मैं थोड़ा सा बेकार हूं कि आपने उस पोस्ट (धन्यवाद!) को उस उपयोगकर्ता के जवाब में संदर्भित किया है जिसका नाम पहली पंक्ति में उल्लिखित है ... –

+1

तो आपकी सिफारिश होगी चेकआउट/पुल/चेकआउट/मर्ज नृत्य के बजाय "गिट मर्ज मूल/ट्रंक" करने के लिए? मैं अगली बार फसल अप करने की कोशिश करूंगा। –

+2

'गिट फ़ेच अपस्ट्रीम ट्रंक का उपयोग करके: ट्रंक' आप एक-लाइनर का उपयोग करके विलय को छोड़ सकते हैं और बस तेज़ी से आगे बढ़ सकते हैं। [मेरा जवाब] देखें (http://stackoverflow.com/a/21601318/177710)। – Oliver

-2

पर अधिक निम्नलिखित का प्रयास करें:

$ git pull trunk branch 
+0

मुझे यह बताते हुए एक त्रुटि मिलती है कि "ट्रंक" एक भंडार नहीं है। –

+0

पहली चेकआउट शाखा फिर गिट पुल गिट करें: //foo.com/someone/bar.git ट्रंक – Pablitorun

+0

एसएलएल मेरा मतलब था कि आप खींचने के साथ एक ही चरण में अपने सभी को करने में सक्षम होना चाहिए, लेकिन जैसा ऊपर बताया गया है, यह कुछ नहीं है सबसे अच्छा विचार नहीं है। – Pablitorun

8

मैं VonC's answer से सहमत हैं, लेकिन सोचा था कि यह सवाल का जवाब मज़ेदार हो सकता है "कैसे आप तेजी से आगे master आप अगर ऐसा एक और शाखा पर? वैसे भी। मैं वहाँ सिर्फ चीनी मिट्टी के बरतन आदेशों का उपयोग करते यह करने के लिए एक रास्ता है नहीं लगता है, लेकिन इस स्क्रिप्ट काम (जाहिर है आप अपने मामले में trunk को master बदलना चाहते हैं) करता है:

#!/bin/sh 

BRANCH=master 
NEWER=origin/master 

if [ x"$(git symbolic-ref HEAD)" = x"refs/heads/$BRANCH" ] 
then 
    echo "This doesn't make sense if you're already on the branch '$BRANCH'" 
    echo "Just run: git merge $NEWER" 
    exit 1 
fi 

BRANCH_HASH=$(git rev-parse $BRANCH) 
NEWER_HASH=$(git rev-parse $NEWER) 
MERGE_BASE=$(git merge-base $BRANCH_HASH $NEWER_HASH) 

if [ "$MERGE_BASE" = "$BRANCH_HASH" ] 
then 
    git update-ref "refs/heads/$BRANCH" "$NEWER_HASH" "$BRANCH_HASH" 
else 
    echo "$BRANCH can't be fast-forwarded to $NEWER" 
    exit 1 
fi 

अद्यतन 2012-10 -20: यह स्क्रिप्ट सिर्फ एक त्वरित उदाहरण था; एक स्क्रिप्ट के लिए जो वही करता है लेकिन स्थानीय शाखा में किसी भी मनमानी प्रतिबद्धता-आश को विलय करने के लिए (जब तक विलय तेजी से आगे होगा), Jefromi's answer to a similar question देखें।

+0

मैंने सोचा कि गिट कुछ ऐसा करने के लिए प्रयुक्त होता था, लेकिन जब मैंने स्रोत में git-pull.sh की जांच की तो मुझे कोई संकेत नहीं मिला, यह अभी भी करता है। – Arrowmaster

+0

मैंने अभी इस स्क्रिप्ट का उपयोग किया - टिप के लिए धन्यवाद! मुझे आश्चर्य है कि यह 'गिट-मर्ज' में नहीं बनाया गया है। आपने सोचा होगा कि यह काफी आम मामला है। – mattjgalloway

+1

आप इसे 'गिट शाखा-एफ मास्टर मूल/मास्टर' के साथ कर सकते हैं, लेकिन आप यह नहीं चाहते हैं: यदि यह फास्ट-फॉरवर्ड विलय नहीं है तो आप प्रतिबद्धता और संघर्ष खो देंगे। – Christopher

27

मुझे लगता है कि से बचने के लिए सबसे आसान रास्ता git checkout trunk, git pull, git checkout branch चक्र का उपयोग करने के this answer है:

git fetch upstream trunk:trunk 

यह आपको वास्तव में क्या चाहता है - अपने स्थानीय शाखा trunk दूरस्थ शाखा के लिए तेजी से आगे सिर।

+3

'गिट फ़ेच मूल ट्रंक: शुरुआती "अपस्ट्रीम" शब्द के साथ धाराप्रवाह नहीं हैं जो शुरुआती लोगों के लिए ट्रंक' है। – pdem

संबंधित मुद्दे