2013-10-11 7 views
5

मेरे पास एक गिट स्टेश स्लॉट में रहने वाली डीबग यूटिलिटीज का एक सेट है; मैं शाखाओं के बीच आगे बढ़ रहा हूं जो छिद्रों में बदलावों के बारे में बहुत ही अलग हैं। मैं git stash apply एक सुविधा का परीक्षण करने के लिए संबंधित शाखा पर शीर्ष छिद्र।क्या मैं गिट स्टैश लगाने के दौरान "रिकर्सिव" द्वारा उपयोग की जाने वाली मर्ज रणनीति को प्रभावित कर सकता हूं?

हालांकि मैं शाखाओं में से एक में उचित विलय संघर्ष में भाग गया, लेकिन मैं छेड़छाड़ में क्या पसंद करना चाहता हूं, इसलिए मैं मर्ज-रणनीति "रिकर्सिव" चाहता हूं जो स्टैश से आने वाले संस्करण को पसंद करे (I अनुमान जो "उनका" होगा, सीएफ man git-merge सेक्शन MERGE-STRATEGIES, उपधारा recursive)।

क्या मैं किसी भी तरह git stash apply बता सकता हूं कि किस मर्ज रणनीति का उपयोग करना है?

उत्तर

3

नहीं, stash स्क्रिप्ट को संशोधित किए बिना नहीं (आपको इसे git-core निर्देशिका में मिल जाएगा)।

ऐसा करने के बजाय मैं git stash branch newbranch[stash-id] का उपयोग वास्तविक शाखा में छीनने के लिए करता हूं। यह इच्छा:

  • जांच प्रतिबद्ध गुप्त कोष
  • git checkout -b newbranch
  • apply --index पर (सफलता पर है, जो हमेशा होना चाहिए) drop गुप्त कोष में बनाया गया था और।

(आपको लगता है कि गुप्त कोष git stash save द्वारा बाद में तुरंत आईएनजी, बहाल कर सकते हैं आप एक गुप्त कोष के रूप में यह चारों ओर रखना चाहते हैं, और फिर git stash apply --index इसे वापस नई शाखा पर डाल प्रभाव में।)

पर इस बिंदु पर, आप नई शाखा पर इंडेक्स और/या नई कार्यशील निर्देशिका को प्रतिबद्ध कर सकते हैं, और/या नई शाखा पर इसके साथ झगड़ा कर सकते हैं, और फिर आपके पास एक "वास्तविक शाखा" है जिसे आप विलय कर सकते हैं।

12

हां, आप बस विलय कर सकते हैं। स्टैश प्रतिबद्ध का नाम stash है।

git cherry-pick -n -m1 -Xtheirs stash 

चेरीपिक चेरीपिक के माता-पिता के आधार पर विलय करता है। Stash commits record the worktree state with two parents, the checked-out commit and the stashed index

-m1 चेरीपिक को पहले माता-पिता को मर्ज बेस के रूप में उपयोग करने के लिए कहता है, जब यहां पर वास्तव में विलय के बारे में कोई अस्पष्टता है जो आप विलय करना चाहते हैं। -n परिणाम न देने का कहना है।

यह एक वर्कट्री और इंडेक्स का उत्पादन करेगा जो स्टैश किए गए वर्कट्री में से मेल खाता है। यदि इसके बजाय आप स्टैश किए गए इंडेक्स में परिवर्तन लागू करना चाहते हैं, तो इसके बजाय चेरीपिक stash^2; वैकल्पिक रूप से, यदि आप -m1 के बजाय स्टैश किए गए वर्कट्री -m2 पर स्टैश किए गए इंडेक्स (यानी अतिरिक्त उर्फ ​​चरण वाली उर्फ ​​अनुक्रमित सामग्री) से हुए परिवर्तनों को लागू करना चाहते हैं।

आप, worktree को केवल मर्ज करना चाहते हैं

savetree=`git write-tree` 
git cherry-pick -n -m1 -Xtheirs stash 
git read-tree $savetree 

कि यहाँ प्रश्न में मामले को संभालने के लिए (परिवर्तन के एक उपयोगी समूह लागू करने) काफी है, लेकिन यह पूरी तरह से पुन: पेश नहीं करता है सबकुछ आपके लिए करता है।स्टैश किए गए इंडेक्स को लागू करना केवल मौजूदा इंडेक्स में बदलता है और केवल मौजूदा वर्कट्री में स्टैस्ड वर्कट्री परिवर्तन केवल सादा परिष्कृत है। git stash/usr/libexec/git-core/git-stash में कोई स्क्रिप्ट है यदि कोई इसे देखना चाहता है।

0

मैं इसी समस्या में भाग गया और एक अस्थायी शाखा के साथ एक ठोस प्रक्रिया का उपयोग कर समाप्त हो गया। आईएमओ, अगर आसानी से मर्ज कमांड के माध्यम से स्टैप कमांड -एक्स पैरामीटर पास किया जाता है तो इसे आसानी से ठीक किया जा सकता है। इस बदसूरत कामकाज पर विचार करें।

नेट प्रभाव: मौजूदा मास्टर को छेड़छाड़ लागू करें, जो स्टैश में उन लोगों के पक्ष में किसी भी अंतर को छोड़ दें।

  1. @torek द्वारा सुझाए गए अनुसार, स्टैश के लिए एक अस्थायी शाखा बनाएं।

    git stash branch tmp [stash-id] 
    
  2. अपने परिवर्तनों में जांचें। किसी भी संदेश का प्रयोग करें, क्योंकि यह प्रतिबद्ध स्थायी नहीं होगा।

    git add --all . 
    git commit -m 'tmp commit' 
    
  3. अपने गंतव्य पर tmp शाखा रिबेस

    git rebase -X ours master 
    
  4. रीसेट अस्थायी प्रतिबद्ध 'हमारा' मर्ज रणनीति का प्रयोग, अपनी वर्तमान अनुक्रमणिका

    git reset HEAD^ 
    
  5. में परिवर्तन जोड़ने अस्थायी शाखा को साफ करें

    git checkout master 
    git branch -d tmp 
    

यह काफी सुविधाजनक हो सकता है जब दोनों स्टैश और मास्टर में कुछ समान परिवर्तन होते हैं (उदा। अगर एक सहयोगी और आप दोनों एक फाइल का नाम बदलते हैं)।

+0

ध्यान दें कि यह स्टेश करता है जैसे चरणबद्ध और अस्थिर परिवर्तनों के बीच अंतर को सुरक्षित नहीं करता है। वे सब अस्थिर खत्म हो जाते हैं। – Quantum7

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

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