क्या यह संभव है कि git में सामग्री का पूर्वावलोकन करें?


554

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

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

मैं यह कैसे कर सकता हूँ?


1
colorized diff output: git stash show -p stash@{1} >~/.diff && vim ~/.diff( vimकिसी भी टेक्स्ट एडिटर का तब तक नहीं होता है जब तक आपके टेक्स्ट एडिटर में diffआउटपुट के लिए सिंटैक्स हाइलाइटिंग सपोर्ट हो )।
ट्रेवर बॉयड स्मिथ

जवाबों:


727

git stash showआपको उन फ़ाइलों को दिखाएगा जो आपके सबसे हाल के स्टेश में बदल गईं। आप -pअंतर दिखाने के लिए विकल्प जोड़ सकते हैं ।

git stash show -p

यदि आप जिस स्टाश में रुचि रखते हैं, वह सबसे हाल का नहीं है, तो कमांड के अंत में स्लैश का नाम जोड़ें:

git stash show -p stash@{2}

यह अच्छा लग रहा है, और मैं इसे मैनुअल में देखता हूं, लेकिन जब मैं कोशिश करता हूं तो यह मुझे देता है fatal: unable to create temp-file: Invalid argument- कोई विचार क्यों?
बेंजोल

29
git stash show -p stash@{0}एक विशिष्ट रोक देखने के लिए उपयोग करें । 0 अंतिम स्वर दिखाता है, 1 दूसरा अंतिम एक .. आदि git stash listसभी उपलब्ध दिखाएगा।
brita_

6
यदि आप पॉवरशेल का उपयोग कर रहे हैं, तो आपको स्टैश नाम को उद्धरणों में रखना होगा। (यानी: git stash show -p 'stash@{0}')
स्कॉट-Pascoe


1
यदि आप फ़ाइल उपयोग में अंतर बचाना चाहते हैंgit stash show -p stash@{0}> stash.txt
S_K

87

वर्तमान सूची को देखने के लिए:

git stash list

आपको इस तरह एक सूची दिखाई देगी:

stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...

किसी भी स्‍टैड में अंतर देखने के लिए:

git stash show -p stash@{n}

34

मैं gitkgit repos कल्पना करने के लिए ग्राफिकल UI का प्रशंसक हूं । आप अंतिम आइटम को इस प्रकार देख सकते हैं:

gitk stash

आप अपने किसी भी रुके हुए बदलाव को देख सकते हैं (जैसा कि सूचीबद्ध है git stash list)। उदाहरण के लिए:

gitk stash@{2}

नीचे दिए गए स्क्रीनशॉट में, आप ऊपरी-बाएँ में एक कमिट के रूप में देख सकते हैं, यह इतिहास में कब और कहाँ से आया है, नीचे दाईं ओर संशोधित फ़ाइलों की सूची, और पंक्ति-दर-पंक्ति नीचे में भिन्न है -बाएं। सभी जबकि टकराव अभी भी दूर है।

एक टकराव देखने के लिए


5
आप stash@{X}एक ही बार में अधिक परिणाम देखने के लिए कमांड-लाइन पर कई मान प्रदान कर सकते हैं , लेकिन मुझे 'gitk में सभी स्टैश प्रविष्टियों को दिखाने' के लिए केवल एक सरल तरीका नहीं मिला है।
नोबार

5
gitk stashलगता है के लिए आशुलिपि होgitk stash@{0}
Leif Gruenwoldt

3
gitk में सभी स्टैड्स को दिखाने के लिए आप उपयोग कर सकते हैं gitk `git stash list --pretty=format:%gd`और फिर अगले स्टैश में जाने के लिए "WIP on" खोजें।
इकर पोहोरस्की

2
gitk --reflogआपको सभी स्‍टैच, और बहुत कुछ देखने देता है।
नोबार

1
gitk एकमात्र ऐसा उपकरण था, जिसने मुझे सीधे दिखाया कि स्टैच में बिना सहेजे फ़ाइलें थीं। अन्य सभी ने मुझे केवल "कोई मतभेद नहीं" दिखाया।
मार्टिन बोनर मोनिका

22

संयुक्त राष्ट्र के पॉप-अप स्लैश में सभी परिवर्तनों को देखने के लिए:

git stash show -p stash@{0}

अन-पॉपेड स्‍टैश में एक विशेष फ़ाइल के परिवर्तनों को देखने के लिए:

git diff HEAD stash@{0} -- path/to/filename.php

अगर किसी को फ़ाइल नाम याद नहीं है, तो यह सभी फाइलों के लिए भी काम करता है बदले हुए हिट अलग हो जाते हैं HEAD stash @ {0}
Simeon

सिर्फ स्पष्टता के लिए: के -pलिए कम है --patch। विकल्प से आता है git-diff। यदि आप लंबे रूप को पसंद करते हैं, तो आप लिख सकते हैं git stash show --patch
पीटरिनो

5

Gitk अनुशंसा से परे क्या यह संभव है कि git में सामग्री का पूर्वावलोकन करें? आप बाघ स्थापित कर सकते हैं और कॉल कर सकते हैं tig stash। यह मुफ्त / खुला कंसोल प्रोग्राम आपको यह चुनने की अनुमति देता है कि तुलना करने के लिए कौन सा स्टैश है


1
कई लड़ाइयों के प्रबंधन के लिए एक आदर्श उपकरण की तरह लगता है! आप क्रमशः पॉप और कुंजी के साथ स्टैप्स को पॉप और ड्रॉप कर सकते हैं। P!
इकर पोहोरस्की

टीयूआई विकल्प हमेशा अच्छे होते हैं, लेकिन पहले से इस्तेमाल किए गए या किसी तरह से पसंद किए जाने वाले लोक के लिए gitk सभी स्टैच दिखाने के लिए इसे हैक करना अपेक्षाकृत आसान है
1737973

4

मैं इसका उपयोग अपने सभी रंग को अलग-अलग हाइलाइटिंग के साथ देखने के लिए करता हूं (फेडोरा 21 पर):

git stash list | 
  awk -F: '{ print "\n\n\n\n"; print $0; print "\n\n"; 
  system("git -c color.ui=always stash show -p " $1); }' | 
  less -R

( Git से लिया गया: देखें कि स्टेश लगाने के बिना स्टैश में क्या है )


4

जब यह प्रश्न पहली बार पूछा गया था, तो यह एक विकल्प नहीं हो सकता है, लेकिन, यदि आप PyCharm का उपयोग करते हैं, तो आप UnStash Changesटूल (VCS-> Git-> UnStash Changes ...) का उपयोग कर सकते हैं । यह आपको स्टैक्ड परिवर्तनों की सूची, साथ ही पॉप, ड्रॉप, क्लियर, या लागू (यदि वांछित हो तो एक नई शाखा में) देखने की अनुमति देता है:

अनस्टैश चेंजेज विंडो

और स्टैश प्रति परिवर्तित फ़ाइलों को देखें:

पथ प्रभावित विंडो

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

यहाँ छवि विवरण दर्ज करें


3

आप निम्न कमांड द्वारा सभी स्टैच की सूची देख सकते हैं:

$ git stash list

stash@{0}: WIP on dev: ddd4d75 spelling fix

stash@{1}: WIP on dev: 40e65a8 setting width for messages

......

......

......


stash@{12}: WIP on dev: 264fdab added token based auth

सबसे नया स्टैश पहला है।

आप nउपरोक्त सूची में दिए गए स्टैच के इंडेक्स का चयन कर सकते हैं और स्टैक्ड विवरण देखने के लिए निम्न कमांड का उपयोग कर सकते हैं

git stash show -p stash@{3}

इसी तरह,

git stash show -p stash@{n}

आप कमांड का उपयोग करके भी भिन्नता की जांच कर सकते हैं:

git diff HEAD stash@{n} -- /path/to/file

3

हाँ, यह देखने के लिए कि इस तरह से फ़ाइल में सहेजना क्या है, यह देखने का सबसे अच्छा तरीका है:

git stash show -p stash@{0} > stash.txt

2

पहले हम सभी स्‍टैश आइटम पाने के लिए गिट स्‍टैश सूची का उपयोग कर सकते हैं:

$git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ....
stash@{2}: WIP on ...

फिर हम git stash show stash@{N}एक विशिष्ट स्लैश के तहत फाइलों की जांच करने के लिए उपयोग कर सकते हैं N। यदि हम इसे अग्नि देते हैं तो हम प्राप्त कर सकते हैं:

$ git stash show stash@{2}
fatal: ambiguous argument 'stash@2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

इसका कारण यह हो सकता है कि खोल घुंघराले ब्रेसिज़ खा रहा है और गिट देखता है stash@2और नहीं stash@{2}। और इसे ठीक करने के लिए हमें ब्रेसिज़ के लिए सिंगल कोट्स का उपयोग करने की आवश्यकता है:

git stash show stash@'{2'}
com/java/myproject/my-xml-impl.xml                     | 16 ++++++++--------
com/java/myproject/MyJavaClass.java                    | 16 ++++++++--------
etc.

2

स्टैक्ड परिवर्तनों की सूची देखें

git stash list

फ़ाइलों की सूची देखने के लिए एक विशेष स्लैश में बदल गया

git stash show -p stash@{0} --name-only

किसी विशेष फ़ाइल को स्‍टेश में देखने के लिए

git show stash@{0} path/to/file

1

सभी स्टैड्स दिखाएं

केवल फ़ाइल नाम:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show $i; done

सभी फ़ाइल में पूर्ण फ़ाइल सामग्री:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show -p $i; done

आपको रंगीन अंतर आउटपुट मिलेगा जो आप space ( आगे ) और b( पीछे की ओर ) के साथ पृष्ठ कर सकते हैं , और qवर्तमान स्लैश के लिए पेजर को बंद कर सकते हैं। यदि आप इसे एक फाइल में रखना चाहते हैं, तो > stashes.diffकमांड में संलग्न करें।


1

मौजूदा उत्तरों के अतिरिक्त जो प्रयोग करने का सुझाव देता है (तीसरे-से-अंतिम चरण के अंतर को दिखाने के लिए)

git stash show -p stash@{2}

ध्यान दें कि git-stashप्रलेखन में , यह लिखा है कि

बस स्टैश इंडेक्स (जैसे पूर्णांक nके बराबर stash@{n}) निर्दिष्ट करके स्टैस को भी संदर्भित किया जा सकता है ।

इसलिए इसका उपयोग करना भी संभव है (यह ऊपर दिए गए आदेश के बराबर है)

git stash show -p 2

जिसे कुछ पॉवरशेल मुद्दों से भी बचना चाहिए ।


1

मुझे कैसे पसंद है gitk आप दिखा सकते हैं कि वास्तव में क्या अनपेक्षित था या इंडेक्स में बैठा था, लेकिन डिफ़ॉल्ट रूप से यह उन सभी वर्गों के बीच में आपके "हिट" को प्रदर्शित करेगा जो वर्तमान शाखा पर हैं।

चाल को निम्नानुसार gitk चलाना है:

gitk "stash@{0}^!"

(यह उद्धरण पॉवर्सशेल में काम करने के लिए है, लेकिन इस तरह से इसे अभी भी अन्य गोले में भी काम करना चाहिए)

यदि आप gitrevisions सहायता पृष्ठ में इस वाक्यविन्यास को देखते हैं तो आपको निम्नलिखित मिलेंगे:

r1^!अंकन के लिए प्रतिबद्ध शामिल r1 लेकिन सभी अपने माता-पिता के शामिल नहीं है। अपने आप से, यह धारणा एकल प्रतिबद्ध r1 को दर्शाता है ।

यह जाहिरा तौर पर इस तरह के मोड में gitk डाल देगा कि केवल चयनित प्रतिबद्ध के तत्काल माता-पिता को दिखाया गया है, जो वास्तव में मुझे पसंद है।


यदि आप इसे आगे ले जाना चाहते हैं और सभी बाधाओं को सूचीबद्ध करना चाहते हैं तो आप इसे चला सकते हैं:

gitk `git stash list '--pretty=format:%gd^!'`

(बैकटिक्स के अंदर वे एकल उद्धरण बैश को खुश करने के लिए आवश्यक हैं, अन्यथा यह विस्मयादिबोधक चिह्न के बारे में शिकायत करता है)

यदि आप Windows पर हैं और cmd या Powershell का उपयोग कर रहे हैं:

gitk "--argscmd=git stash list --pretty=format:%gd^!"

0

निम्न आदेश का उपयोग स्टैक्ड परिवर्तन के किसी भी अन्य स्टैश या कमिट या शाखा या हेड को अलग करने के लिए किया जा सकता है।

git stash show
git show
git diff
git difftool

आइए देखें, हम उपर्युक्त आदेशों में से प्रत्येक का उपयोग कैसे कर सकते हैं।

  1. गिट स्टैश शो

सरल कमांड गिट स्टैश शो फ़ाइल के परिवर्तनों का बहुत संक्षिप्त सारांश देता है, लेकिन वर्तमान HEAD के खिलाफ परिवर्तनों के अंतर को नहीं दिखाएगा।

  1. गिट शो

कमांड गिट-शो का उपयोग विभिन्न प्रकार की वस्तुओं को देखने के लिए किया जाता है।

कमांड गिट-शो का उपयोग न केवल स्टेश परिवर्तनों की कल्पना करने के लिए किया जाता है, बल्कि एक या एक से अधिक वस्तुओं जैसे कि बूँद, पेड़, टैग और कमिट को देखने के लिए भी किया जाता है।

  1. git का अंतर

कमांड git-diff भी सामान्य कमांड में से एक है जिसका उपयोग कमिट्स, कमिट और वर्किंग ट्री, आदि के बीच परिवर्तन दिखाने के लिए किया जाता है।

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

शीर्ष सबसे टकराव के बीच अंतर पाने के लिए @ {0} और मास्टर शाखा:

$ git अलग स्टेश @ {0} मास्टर

केवल फ़ाइल के नाम ही प्रदर्शित न करें कि परिवर्तन न हों:

$ git diff --name-only stash @ {0} मास्टर

चयनित फ़ाइल के लिए चयनित स्टैम्स के बीच का अंतर देखें:

$ git का अंतर stash @ {0} ^ 1 stash @ {0} -

  1. git difftool

कमांड git-difftool का उपयोग चयनित स्लैश और चयनित कमिट या शाखा या स्टैश के बीच अंतर खोजने के लिए भी किया जा सकता है

नवीनतम दो चरणों के बीच अंतर देखें:

$ git difftool stash @ {0} stash @ {0} ^ 1

git difftool --dir-diff stash @ {0} stash @ {0} ^ 1

सारांश:

कमांड जो चुनिंदा स्लैश गिट स्टैश शो, गिट शो, गिट डिफरेंस, गिट मल्टफुटूल से डिफरेंट निकालने के लिए उपयोगी हैं।

कमांड गिट स्टैश शो का उपयोग करके अंतर देखें,

git स्टैश शो -p स्टैश @ {0}

कमांड git शो का उपयोग करके स्लैश में बदलाव देखें,

git show stash @ {1}

नवीनतम गिट और चयनित कमिट के बीच अंतर को देखें

git diff stash @ {0}

संदर्भ:

https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/

https://git-scm.com/docs/git-show

https://git-scm.com/docs/git-stash

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.