2011-11-08 4 views
33

के साथ काम करने वाली प्रति का एक अंतर कर सकता है मैं अपनी मौजूदा कामकाजी प्रतिलिपि को एक छेड़छाड़ के खिलाफ कैसे बदल सकता हूं?स्टैच

मेरे उपयोग के मामले: मेरे काम कर प्रति पहले से ही मेरे [email protected]{0} में परिवर्तन का एक सबसेट होता है, लेकिन मैं [email protected]{0} में सभी परिवर्तनों को लागू नहीं करना चाहती। मैं यह निर्धारित करने में मदद करने के लिए एक अंतर करना चाहता हूं कि [email protected]{0} में कौन से वांछनीय परिवर्तन अभी भी मेरी कार्यशील प्रतिलिपि से गायब हैं।

उत्तर

26

यदि यह आपका सबसे हालिया छिद्र था, git diff [email protected]{0} ऐसा करेगा। यदि नहीं, तो आप जिस स्टैश की तुलना करना चाहते हैं उसकी अनुक्रमणिका प्राप्त करने के लिए आप git stash list का उपयोग कर सकते हैं।

+1

मैंने कोशिश की है। –

+0

और क्या यह काम नहीं किया? आप क्या उम्मीद कर रहे थे और आपको क्या मिला? – Andy

+0

मैंने केवल कुछ फाइलों को छीन लिया है। 'गिट diff stash @ {0}' परिणाम ने diff परिणामों के पृष्ठों और पृष्ठों को दिखाया। मैं केवल एक पृष्ठ को diffs के साथ उम्मीद करता हूं जो कि फ़ाइलों के बारे में हैं। लेकिन diff परिणाम मुझे उन फाइलों के बारे में अलग दिखा रहा था जिन्हें मैंने नहीं छोड़ा था। –

6

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

git add . 
git commit -m "Dirty commit" 
  • Diff कि प्रतिबद्ध के साथ गुप्त कोष:

    • अपने गंदे काम कर पेड़ प्रतिबद्ध

      git diff [email protected]{0} 
      
    • फिर, बाद में, आप के लिए प्रतिबद्ध वापस ला सकते हैं, और उसे वापस कामकाजी डीआईआर में:

      git reset --soft HEAD~1 
      git reset . 
      

    अब आप अपने छिद्र के साथ गंदे काम करने वाले पेड़ को अलग कर चुके हैं, और जहां आप शुरुआत में थे वहां वापस आ गए हैं।

  • 14

    मुझे लगता है कि ओपी यह देखने का जवाब चाहता था कि कामकाजी प्रति में मौजूद फाइलों के अलावा स्टैश में क्या अंतर है।

    निम्न आदेश दिखाता है कि क्या स्टैश शामिल है।

    git stash show -p [email protected]{0} 
    
    +1

    @ डाउनवॉटर - डाउनवोट के लिए कोई कारण? – niksvp

    1
    नहीं

    यकीन है कि क्या ओ पी चाहता था, लेकिन मैं इस का उपयोग देखने के लिए क्या गुप्त कोष की वास्तविक diff सेट है:

    git difftool [email protected]{0}^!

    या

    git diff [email protected]{0}^!

    या

    git diff [email protected]{0}^! > patchfile

    +0

    यह स्वीकार्य उत्तर होना चाहिए। –

    2

    आप अपनी कामकाजी प्रतिलिपि को कम या दबाए बिना ऐसा नहीं कर सकते हैं। Stashing शायद कम जोखिम है:

    git add -A     # Stage all changes in your working copy. 
    git stash save --keep-index # Stash your working copy and leave it intact 
    git diff [email protected]{0} [email protected]{1} 
    

    गुप्त कोष तुम सिर्फ diffing की खातिर बनाया से छुटकारा पाने के लिए, git stash pop या git stash drop [email protected]{0} का उपयोग करें।

    यदि आप इसके बजाय प्रतिबद्धता का उपयोग करना चाहते हैं, तो @Magne's answer देखें।

    0

    आप दो Git तो बस की तरह कमांड के साथ संयोजन के रूप में यूनिक्स diff आदेश का उपयोग कर सकते हैं:

    diff <(git diff) <(git stash show -p [email protected]{0}) 
    

    बेशक आप गुप्त कोष @ {0} जो कुछ गुप्त कोष में आप चाहते हैं बदल सकते हैं। यह आदेश वास्तव में वास्तविक कार्य निर्देशिका (गिट diff) की तुलना में आपकी किसी एक स्टैश के साथ तुलना कर रहा है।

    अद्यतन

    तुम भी colordiff स्थापित करने और एक बहुत ज्यादा बेहतर परिणाम देख सकते हैं:

    स्थापना:

    • Ubuntu/डेबियन: sudo colordiff
    • स्थापित apt-get
    • ओएस एक्स: ब्रू इंस्टॉल कोलोर्डिफ़

    और फिर बस बदलने के आदेश करने के लिए:

    colordiff <(git diff) <(git stash show -p [email protected]{0}) 
    
    1

    हाँ आप git stash show -p, जांच में अधिक जानकारी के लिए इस Git diff against a stash उपयोग कर सकते हैं।

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