Git में वर्किंग डायरेक्टरी में बदलावों को ध्यान में रखते हुए स्टैश चेंज


145

क्या कोई ऐसा git stashआदेश है जो आपके परिवर्तनों को चुरा लेता है, लेकिन उन्हें कार्यशील निर्देशिका में भी रखता है? तो मूल रूप git stash; git stash applyसे एक कदम में?




1
@ मर्सिएज़पॉल्स्की नहीं, वास्तव में नहीं। यह प्रश्न मेरे लिए अधिक विशिष्ट है। मेरे सवाल का जवाब बस "नहीं" था। लिंक के लिए धन्यवाद, हालांकि, यह कुछ लोगों के लिए सहायक हो सकता है, या बाद के समय में भी खुद को।
माइकल डोरस्ट

स्पष्ट होने के लिए, मेरा प्रश्न अलग है क्योंकि मुझे कोई आवश्यकता नहीं है कि फाइलें अछूती रहें। मैं केवल विकल्पों की तलाश कर रहा था git stash && git stash apply। आप देखेंगे कि उस प्रश्न के उत्तर मेरे से काफी अलग हैं।
माइकल डोरस्ट

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

जवाबों:


156

इसके लायक क्या है, ऐसा करने का एक और तरीका है कि आप जो बदलाव रखना चाहते हैं, उसे चरणबद्ध करें और फिर सब कुछ का उपयोग करके रोकें --keep-index:

$ git add modified-file.txt
$ git stash push --keep-index

ऊपर दिए गए आदेश सब कुछ रोक देंगे, लेकिन यह आपके कार्यशील निर्देशिका में संग्रहीत फ़ाइलों को छोड़ देगा।

के लिएgit stash या git-scm से आधिकारिक लिनक्स कर्नेल Git प्रलेखन :

यदि --keep-indexविकल्प का उपयोग किया जाता है, तो पहले से ही सूचकांक में जोड़े गए सभी परिवर्तन बरकरार हैं।


3
यह अब तक का सबसे सीधा स्पष्टीकरण है - प्रशासन-सूचकांक मैंने देखा है। डॉक्स पर जिस तरह से शब्द लिखे गए थे, उससे मुझे काफी मतलब नहीं था।
40detectives

52

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

यदि आप इसे एक टुकड़े में चाहते हैं, तो आप एक उपनाम बना सकते हैं। बस कुछ इस तरह से रखें ~/.gitconfig:

[alias]
    sta = "!git stash && git stash apply"

इस दृष्टिकोण का दोष यह है कि सभी फाइलें स्टैक्ड और रीक्रिएट की गई हैं। इसका मतलब है कि विचाराधीन फाइलों पर टाइमस्टैम्प को बदल दिया जाएगा। (शिकायत करने के कारण जब मैं फ़ाइल को सहेजने की कोशिश करता हूं, तो इसे खोलने से पहले यदि मैंने ऐसा किया git staहो, और यदि आप makeया दोस्तों का उपयोग कर रहे हैं, तो अनावश्यक रूप से पुनर्लेखन हो सकता है ।)


1
भी, के बीच अंतर क्या है git stash; git stash applyऔर git stash && git stash apply?
माइकल डोरस्ट


2
@anthropomorphic git config --global alias.sta "!git stash && git stash apply"करना चाहिए।

मैं git stash saveएक तर्क के साथ उपयोग करने के लिए इस उपनाम को कैसे संशोधित कर सकता हूं और फिर कर सकता हूं git stash apply?
कताई

1
@ जयश्री, धमाके का मतलब है कि यह वास्तव में बाहरी आदेश है, न कि केवल तर्क। डॉक्स के अनुसार : "जैसा कि आप बता सकते हैं, Git बस नए कमांड को आप जो भी इसके लिए उपनाम देता है, के साथ बदल देता है। हालांकि, शायद आप Git उपकमांड के बजाय एक बाहरी कमांड चलाना चाहते हैं। उस स्थिति में, आप कमांड को कमांड से शुरू करते हैं। चरित्र। "
माथा

10

उत्तर में एक छोटी वृद्धि जो व्यावहारिक रूप से उपयोग करने की संभावना हो सकती है।

$ git add modified-file.txt  
(OR $ git add .    ---- for all modified file)
$ git stash save --keep-index "Your Comment"

नोट: "गिट ऐड" के बिना काम नहीं करता है (उदाहरण के लिए संशोधित लेकिन फ़ाइलों को जोड़ने के लिए नहीं जोड़ा गया)
alex_1948511

4

एक चाल है कि आप मदद कर सकते हैं, नहीं 'बात है, लेकिन परिवार कल्याण:

git add -A
git commit -m "this is what's called stashing"       (create new stash commit)
git tag stash                               (mark the commit with 'stash' tag)
git reset HEAD~        (Now go back to where you've left with your working dir intact)

और इसलिए अब आपके पास अपने निपटान में एक कमिटेड टैग है, git stash popवैसे भी ऐसा करना संभव नहीं है, लेकिन आप वहां से पैच या रिसेटिंग फाइल बनाने जैसे काम कर सकते हैं, आपकी वर्किंग डीआईआर फाइलें भी बीटीडब्ल्यू बरकरार रहती हैं।


2

आप git stash createएक स्‍टैश कमिट बनाने के लिए उपयोग कर सकते हैं , और फिर इसे स्‍लैश का उपयोग करके बचा सकते हैं git stash store:

git stash store $(git stash create) -m "Stash commit message"

इसे अधिक सुविधाजनक बनाने के लिए एक git उपनाम के लिए बचाया जा सकता है:

git config --global alias.stash-keep '!git stash store $(git stash create)'

git stash-keep -m "Stash commit message"

ध्यान दें कि यह वह सब कुछ नहीं करता है जो git stash pushकरता है। उदाहरण के लिए, यह शाखा के नाम को प्रतिबद्ध नहीं करता है, उदाहरण के लिए " stash@{0}: On myBranch: Stash commit message"।


1
यह पसंद है!! हालांकि एक सुधार: man git-stashकहते हैं -m <message>कि प्रतिबद्ध हैश से पहले आना होगा। कुछ नया करने के लिए परिवर्तन को छोड़कर।
तानीस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.