2010-11-03 1 views
5

मान लें कि एक फ़ाइल गिट के साथ संघर्ष स्थिति में है।गिट: संघर्ष के बाद इंडेक्स/काम करने वाले पेड़ में फ़ाइल के विभिन्न चरणों को स्टोर करें

इसका मतलब है कि सूचकांक पिछले एक, एक शाखा से एक है, अन्य शाखा से एक फाइल के 3 संस्करणों में शामिल है।

मैं सूचकांक में काम कर निर्देशिका में संस्करण 3 ("उनकी"), और मंच संस्करण 2 ("हमारा") चेकआउट करना चाहते हैं।

क्या ऐसा करने के लिए कोई दर्द रहित तरीका है? के रूप में हल है कि फाइल को चिह्नित करना होगा ("उनकी" अर्थ नहीं "हमारा" या):

+0

वास्तव में यह (वर्तमान शाखा आप में विलय से) 'हमारा' संस्करण, 'उनकी' संस्करण (शाखा से आप विलय कर रहे हैं), और 'पूर्वज' संस्करण (दोनों शाखाओं के आम पूर्वज) है - पिछले संस्करण में नहीं सामान्य। –

उत्तर

4

शायद सबसे दर्द रहित तरीका इस तरह है।

# Checkout 'their' version from the index into the working tree 
git checkout --theirs file 

# reset the index to the HEAD version, i.e 'our' branch 
git reset HEAD file 

update-index पाइपलाइन के साथ सूचकांक के साथ लगभग नगण्य आवश्यक नहीं होना चाहिए जब तक आप अपने HEAD (ताकि बात करने के लिए) खो दिया है।

+0

उत्कृष्ट। बहुत आसान +1 – VonC

1

चाल "एक संस्करण सूचकांक में जोड़ने से" में है।
तो इसे अंतिम चरण होना चाहिए।

हो सकता है कि कुछ की तरह:

git show :3:<filename> > <filename>.theirs # save the "theirs" version in a tmp file 
git show :2:<filename> > <filename>  # display the "ours" version in the working dir 
git add <filename>       # add it to the index 
              # (marking the conflicting file as resolved) 
move <filename>.theirs <filename>  # erasing the file with the "theirs" version 
              # in the working directory 

नहीं वास्तव में "दर्दरहित" ...


अस्थायी फ़ाइल बचने के लिए, Jakub Narębskigit update index (एक पाइपलाइन आदेश) का उपयोग कर सीधे हेरफेर करने के लिए पता चलता है अनुक्रमणिका।

--replace --cacheinfo <mode> <object> <path> 

--cacheinfo एक फ़ाइल है कि वर्तमान कार्यशील निर्देशिका में नहीं है रजिस्टर करने के लिए प्रयोग किया जाता है। यह न्यूनतम चेकआउट विलय के लिए उपयोगी है।

डिफ़ॉल्ट रूप से, जब एक फ़ाइल पथ सूचकांक में मौजूद है, Git अद्यतन सूचकांक path/file जोड़ने के लिए एक प्रयास मना कर दिया। इसी तरह यदि कोई फ़ाइल path/file मौजूद है, तो फ़ाइल पथ जोड़ा नहीं जा सकता है। --replace ध्वज के साथ, प्रविष्टियों के साथ संघर्ष करने वाली मौजूदा प्रविष्टियां स्वचालित रूप से चेतावनी संदेशों के साथ हटा दी जाती हैं।

+0

वॉनसी: आपको चाल ठीक है: इंडेक्स चरणों को नष्ट कर रहा है। मैंने अभी तक आपका समाधान निकाला था! :-) बिल्कुल दर्द रहित नहीं, लेकिन वैसे भी धन्यवाद! मैं कुछ गिट प्लंबिंग कमांड की तलाश में हूं जो अस्थायी फ़ाइल को संग्रहीत करने की परेशानी के बिना इसे प्राप्त करेगा। –

+0

@ ओलिवियर: ठीक है, बस जकूब या जेफोमी या चार्ल्स या किसी भी समय प्रतीक्षा करें;) – VonC

+0

आप निम्न स्तर ['गिट अपडेट-इंडेक्स'] (http://www.kernel.org/pub) का उपयोग कर सकते हैं /software/scm/git/docs/git-update-index.html) सूचकांक में हेरफेर करने के: देखना '--cacheinfo ' (शायद '--replace') और' --force-remove' विकल्पों के साथ। –

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