अगर मैं दौड़ता हूं git stash -u
, तो मैं अनट्रैक की गई फाइलों को स्टैश कर सकता हूं। हालाँकि, कहा गया है कि बिना पढ़ी हुई फाइलें बिल्कुल नहीं दिखती हैं git stash show stash@{0}
। क्या कोई तरीका है बिना स्टैक्ड फाइल किए बिना स्टैक्ड फाइल दिखाने का?
अगर मैं दौड़ता हूं git stash -u
, तो मैं अनट्रैक की गई फाइलों को स्टैश कर सकता हूं। हालाँकि, कहा गया है कि बिना पढ़ी हुई फाइलें बिल्कुल नहीं दिखती हैं git stash show stash@{0}
। क्या कोई तरीका है बिना स्टैक्ड फाइल किए बिना स्टैक्ड फाइल दिखाने का?
जवाबों:
स्टैक्ड कमिट के तीसरे माता-पिता में अनट्रैक की गई फ़ाइलें संग्रहीत हैं। (यह वास्तव में प्रलेखित नहीं है, लेकिन इस बात से बहुत स्पष्ट है , जो -u सुविधा, 787513 ... , और जिस तरह से वाक्यांशों के लिए बाकी दस्तावेज़ीकरण की git-stash
शुरुआत की गई है ... या बस करके git log --graph stash@{0}
)
आप स्टाॅश के "अनट्रैक" भाग को देख सकते हैं:
git show stash@{0}^3
या, केवल "अनट्रेक्टेड" ट्री ही, इसके द्वारा:
git show stash@{0}^3:
या, ट्री में एक विशेष "अनट्रैक" फ़ाइल के माध्यम से:
git show stash@{0}^3:<path/to/file>
दुर्भाग्यवश, सभी मंचित + अस्थिर + अनियंत्रित बनाम "वर्तमान" स्थिति के बीच के अंतर का सारांश प्राप्त करने का कोई अच्छा तरीका नहीं है। अर्थात: git show stash@{0}
अनट्रैक की गई फ़ाइलों को शामिल करने के लिए नहीं बनाया जा सकता। इसका कारण यह है कि स्टैश की ट्री ऑब्जेक्ट खुद को प्रतिबद्ध करती है, जिसे संदर्भित किया जाता है stash@{0}:
, तीसरे, "अस्थिर" माता-पिता से कोई भी बदलाव शामिल नहीं है।
यह उस तरह से होता है जिस तरह से स्टैम्स को फिर से लागू किया जाता है: ट्रैक की गई फ़ाइलों को पैच के रूप में आसानी से लागू किया जा सकता है, जबकि अनट्रैक की गई फ़ाइलों को केवल "संपूर्ण फ़ाइलों" के रूप में, सिद्धांत रूप में लागू किया जा सकता है।
git log --graph --topo-order -m -u
। Matthewlmcclure.com/s/2014/01/10/…
fatal: ambiguous argument 'stash@{0}^3': unknown revision or path not in the working tree.
) यदि आपके पास वास्तव में उस स्टैश में अनट्रैक की गई फाइलें नहीं हैं (लेकिन आपने जो सोचा था)।
git stash show
है नहीं ट्रैक न किए गए फ़ाइलें (कम से कम Git 2.7.4 के लिए सच) दिखाने:
git stash pop
पहले अनट्रैक्ड फाइल्स को रिस्टोर करने का प्रयास करेंगे, फिर ट्रैक की गई फाइल्स को रिस्टोर करने का प्रयास करेंगे। यदि बाद वाला ऑपरेशन विफल हो जाता है (उदाहरण के लिए संघर्ष), पहला ऑपरेशन रोल-बैक नहीं है (अनट्रैकड-फाइल-स्टैश इस तरह रहेगा लेकिन फाइलें डिस्क से नहीं हटाई जाती हैं), इसलिए यदि आप संघर्ष को ठीक करते हैं, तो अगला पॉप विफल हो जाएगा वैसे भी।
आप निम्न कमांड के साथ सभी स्टैट्स कमिट्स को सूचीबद्ध कर सकते हैं:
git rev-list -g stash
चूंकि स्टैड्स को HEAD, इंडेक्स के 3-वे मर्ज कमेटी के रूप में दर्शाया जाता है, और बिना फाइल की एक पैरेंट-लेस "रूट" कमेटी, उपरोक्त आउटपुट को निम्न में पाइपिंग करके अनट्रैक फाइल स्टैम्स को सूचीबद्ध किया जा सकता है:
git rev-list -g stash | git rev-list --stdin --max-parents=0
उपरोक्त के उपयोगी अनुप्रयोग:
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git show --stat
बेशक, --stat
फ़ाइलों की सामग्री को देखने के लिए निकालें ।
git rev-list -g stash | xargs -n1 git ls-tree -r | sort -u | grep <pattern>
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git grep <pattern>
git rev-list -g stash | git rev-list --stdin | xargs git show --stat
स्टाॅक में अनट्रैक की गई फाइलों को सूचीबद्ध करने के लिए:
git ls-tree -r stash@{0}^3 --name-only
सभी अनटैक की गई फ़ाइलों का पूर्ण रूप दिखाने के लिए (सामग्री के साथ):
git show stash@{0}^3
ये कमांड अंतिम (सबसे हालिया) स्टैश पढ़ते हैं। पहले के स्टैच के लिए, "स्टेश @" के पीछे की संख्या बढ़ाएं, उदाहरण के stash@{2}
लिए अंतिम स्टैश से दूसरे के लिए।
इसका कारण यह है कि git stash
प्रत्येक स्टैश के लिए एक मर्ज कमिट बनाता है, जिसे इस प्रकार संदर्भित किया जा सकता है stash@{0}
, stash@{1}
आदि। इस कमिट का पहला अभिभावक स्टैश के समय HEAD है, दूसरे पैरेंट में ट्रैक की गई फ़ाइलों में परिवर्तन हैं, और तीसरा (जो मौजूद नहीं हो सकता है) अनट्रैक फ़ाइलों में परिवर्तन।
यह "चर्चा" के तहत मैनपेज में आंशिक रूप से समझाया गया है ।
सभी फाइलों को देखने के लिए (दोनों ट्रैक किए गए और अनट्रैक किए गए), मैंने इस उपनाम को अपने कॉन्फ़िगरेशन में जोड़ा:
showstash = "!if test -z $1; then set -- 0; fi; git show --stat stash@{$1} && git show --stat stash@{$1}^3 2>/dev/null || echo No untracked files -"
यह एक एकल तर्क लेता है कि आप कौन सा रोकना चाहते हैं। ध्यान दें कि यह अभी भी दो बैक-टू-बैक सूची में प्रस्तुत करेगा।
if...fi
अनुभाग बैश तर्क बदलता है $ 1 0 करने के लिए करता है, तो कोई भी पारित किया गया था।
वर्कअराउंड: फ़ाइलों को स्टेज करने से पहले उन्हें मंचित करने से उम्मीद के मुताबिक git stash show -p
काम हो जाएगा ।
git add .
git stash save
नोट: यह तरीका इंटरएक्टिव भागों को जोड़ने वाली शक्ति भी देता है, यहाँ बताया गया है कि कैसे ।
सावधानी: सुनिश्चित करें कि आपके पास पहले काम नहीं है, या आप इसे भेद नहीं पाएंगे।
यह उपयोग का हो सकता है।
git stash show
कार्य की प्रतिलिपि और # 1 के बीच अंतर दिखाने के लिए प्रकट होता है (git-stash.sh से प्रासंगिक कोड:git diff ${FLAGS:---stat} $b_commit $w_commit
जिसमें $ b_commit # 1 है और $ w_commit स्टैश कमिट है); क्याgit stash show
# 3 को भी शामिल करने के लिए कोई अंतर्निहित तरीका है ?