Git में नाम से एक स्लैश को कैसे नाम दें और पुनः प्राप्त करें?


1417

मैं हमेशा इस धारणा के तहत था कि आप एक स्टैश को एक नाम दे सकते हैं git stash save stashname, जिसे आप बाद में आवेदन करके कर सकते हैं git stash apply stashname। लेकिन ऐसा लगता है कि इस मामले में वह सब होता है जो कि stashnameस्टैश विवरण के रूप में उपयोग किया जाएगा।

क्या वास्तव में एक नाम का कोई रास्ता नहीं है? यदि नहीं, तो आप समान कार्यक्षमता प्राप्त करने की क्या सलाह देंगे? अनिवार्य रूप से मेरे पास एक छोटा सा स्टैच है जिसे मैं समय-समय पर लागू करना चाहूंगा, लेकिन हमेशा यह नहीं देखना चाहता git stash listकि इसकी वास्तविक संख्या क्या है।


68
git stash push -m stashnameहै वर्तमान वाक्य रचनाgit stash save stashnameपदावनत कर दिया गया है।
शेरिलहोमन

1
git stash पुश -m stashname 2.8.0.windows.1 में काम नहीं करता है।
जैक

Git for Windows 2.26.0 कुछ दिनों पहले जारी किया गया है। शायद अब यह तय हो गया है। github.com/git-for-windows/git/releases/tag/v2.26.0.windows.1
tom_mai78101

जवाबों:


813

इसे आपको इसी तरह करना होगा:

git stash save "my_stash"

जहां "my_stash"पर स्टैश नाम है।

जानने के लिए कुछ और उपयोगी बातें: सभी स्टैक एक स्टैक में संग्रहीत होते हैं। प्रकार:

git stash list

यह आपके सभी स्टैम्स को सूचीबद्ध करेगा।

एक स्लैश लागू करने और इसे स्टैक स्टैक से हटाने के लिए, टाइप करें:

git stash pop stash@{n}

एक स्टैश लगाने के लिए और इसे स्टाॅस स्टैक में रखने के लिए टाइप करें:

git stash apply stash@{n}

nस्टैक्ड परिवर्तन का सूचकांक कहां है।


88
इस सवाल का जवाब नहीं है। डिफ़ॉल्ट रूप से आप अपने स्टैश के लिए संख्याओं का एक समूह बनाते हैं, लेकिन यह जवाब नहीं देता कि आप आसानी से पहचानने के लिए एक नाम कैसे डाल सकते हैं।
GoodSp33d

16
ओपी स्पष्ट रूप से कस्टम नाम के अजीब @ @ n} नामों से बचने की कोशिश कर रहा है। git stash apply <custom-name>
stewSquared

10
नाम से एक स्टाश को पुनः प्राप्त करने के बारे में सवाल का जवाब नहीं देता।
nullsteph

45
git stash push -m my_stashहै वर्तमान वाक्य रचनाgit stash save my_stashपदावनत कर दिया गया है।
शेरलहोमन

21
यह अप्रासंगिक नहीं है। यह उपयोगी है।
गायन वीरकुट्टी

439

git stash saveके रूप में आप उपयोग कर सकते हैं, 2.15.x / 2.16 के रूप में पदावनत किया जाता हैgit stash push -m "message"

आप इसे इस तरह से उपयोग कर सकते हैं:

git stash push -m "message"

जहां "संदेश" उस रोक के लिए आपका नोट है।

आदेश में आप उपयोग कर सकते हैं छिपाने की जगह git stash list:। यह इस तरह से एक सूची का उत्पादन करेगा, उदाहरण के लिए:

stash@{0}: On develop: perf-spike
stash@{1}: On develop: node v10

तो आप बस applyइसे देने का उपयोग करें stash@{index}:

git stash apply stash@{1}

सन्दर्भ git stash मैन पेज


9
डॉक्स सिंटैक्स के pushबजाय दिखा रहा है save: git stash push
SherylHohman

30
यही असली जवाब है। दुर्भाग्य से, इसके ऊपर एक टन पुराने उत्तर हैं।
मलान

1
नए पर अधिक के लिए git stash push: stackoverflow.com/a/47231547/6309
VonC

स्रोत (नवीनतम वर्तमान डॉक्टर पर) पदावनति
गेब्रियल डेविलर्स

1
एफडब्ल्यूआईडब्ल्यू: git stash apply stash@{1}पॉवर्सशेल में चलने पर आपको एक error: unknown switch 'e'बैक मिलेगा । इसके बजाय का उपयोग करें git stash apply --index 1या git stash apply 'stash@{1}'भागने }और {एक backtick के साथ `।
शाम

104

यदि आपको लगता है कि यह एक शाखा में एक स्लैश बदल सकता है तो यह महत्वपूर्ण है:

git stash branch <branchname> [<stash>]

मैन पेज से:

यह एक नई शाखा बनाता है और जाँचता है जिसका नाम <branchname>उस कमेटी से शुरू किया गया <stash>था जिस पर मूल रूप से बनाया गया था, <stash>नए वर्किंग ट्री और इंडेक्स में दर्ज किए गए परिवर्तनों को लागू करता है , फिर <stash>सफलतापूर्वक पूरा होने पर ड्रॉप करता है । जब नहीं <stash>दिया जाता है, तो नवीनतम लागू करें।

यह उपयोगी है यदि आप जिस शाखा पर भागे हैं, git stash saveवह काफी बदल गई है कि संघर्ष के कारण गिट स्टैश लागू विफल हो जाता है। चूँकि यह स्ट्रैट उस समय के शीर्ष पर लागू होता है जो उस समय हिट था, जिस समय गिट स्टैश चला था, यह मूल रूप से स्टैक्ड अवस्था को बिना किसी विरोध के पुनर्स्थापित करता है।

आप बाद में इस नई शाखा को किसी अन्य स्थान पर फिर से जमा कर सकते हैं, जहां आप जब अटके हुए थे, तब उसका एक वंशज है।


1
चूँकि git में शाखाएँ बहुत सस्ती हैं, इसलिए यह सुझाव मेरे लिए सबसे उपयोगी है।
जयन

5
निश्चित रूप से, लेकिन यह मदद नहीं करता है यदि आप बाद में अलग-अलग शाखाओं में इस स्लैश को फिर से लागू करना चाहते हैं, जैसे ओपी पूछ रहा है। आपको उसका सिर चेर-पिक करना होगा।
stewSquared

@AdamDymitruk क्या पॉपिंग के बिना स्टैश रखने के दौरान इसे करने का कोई तरीका है। ( git stash apply
लाइक

अजीब बात है, जब मैंने यह कोशिश की तो मुझे एक त्रुटि संदेश मिला कि मेरी एक फाइल को चेक आउट करते समय ओवरराइट कर दिया जाएगा और मुझे अपने परिवर्तनों को कमिट करना चाहिए (या!)। git stash push -m 'name'काम किया।
वार्टवार्ट

@AdamDymmitruk अद्भुत जवाब। मेरा दिमाग खराब कर दिया था।
दान

75

यदि आप अपनी वर्तमान कार्य प्रतिलिपि के कुछ या सभी परिवर्तनों को सहेजने के लिए बस एक हल्के तरीके की तलाश कर रहे हैं और फिर बाद में उन्हें पुनः प्राप्त करेंगे, तो एक पैच फ़ाइल पर विचार करें:

# save your working copy changes
git diff > some.patch

# re-apply it later
git apply some.patch

हर अब और फिर मुझे आश्चर्य होता है कि क्या मुझे इसके लिए स्टैड्स का उपयोग करना चाहिए और फिर मुझे ऊपर पागलपन जैसी चीजें दिखाई देती हैं और मैं जो कर रहा हूं उससे संतुष्ट हूं। :)


2
यह बात है! धन्यवाद। मैंने अपने .gitignore को भी .patch फ़ाइलों को अनदेखा करने के लिए अपडेट किया है और मैं जितनी चाहे उतने पैच करने के लिए तैयार हूं।
जूं

मैं प्रश्न के पीछे के इरादे को देख सकता हूं, जो कि हर बार जब आप मास्टर से एक शाखा निकालते हैं और उन्हें प्रतिबद्ध नहीं करते हैं, तो कुछ स्थानीय परिवर्तन लागू होते हैं। तो, शायद सवाल को सही किया जाना चाहिए था और इस जवाब को समाधान के रूप में स्वीकार किया जाना चाहिए था। सरल भी।
ank

46

स्टैम्स का मतलब स्थायी चीजें नहीं हैं, जैसा आप चाहते हैं। आप शायद कमिट पर टैग का उपयोग करके बेहतर सेवा करेंगे। उस चीज को कंस्ट्रक्ट करें जिसे आप स्टैश करना चाहते हैं। इसके लिए एक कमिटमेंट बनाएं। उस कमिट के लिए एक टैग बनाएं। फिर अपनी शाखा को वापस रोल करें HEAD^। अब जब आप उस स्टैप को फिर से लगाना चाहते हैं तो आप उपयोग कर सकते हैं git cherry-pick -n tagname( -nहै --no-commit)।


1
निश्चित रूप से इस दृष्टिकोण की तरह, कुछ साफ लगता है कि बस named commitकहीं बाहर लटका हुआ है। केवल हल्के झुंझलाहट यह है कि यह चेरी पिक पर प्रतिबद्ध नहीं है और इस अंतर में रहता है, जिसका मतलब है कि इसे अगले प्रतिबद्ध के दौरान मैन्युअल रूप से जांचने की आवश्यकता नहीं होगी।
आदित्य सांसद

1
यह सबसे नज़दीकी है। मुझे लगता है कि मैं इसके लिए कुछ उपनाम बनाऊंगा। मुझे वर्णन "नाम" के रूप में उपयोग करना पसंद नहीं है।
stewSquared

यह सूचकांक में शर्म की बात है और आपको रीसेट करना होगा, किसी को एक --no-stageविकल्प पैच करना चाहिए ! संबंधित: stackoverflow.com/questions/32333383/…
Ciro Santilli 冠状 .com/ .com/ .com/

41

git stash push -m aNameForYourStashइसे बचाने के लिए उपयोग करें। फिर उस स्टैशgit stash list के सूचकांक को जानने के लिए उपयोग करें जिसे आप लागू करना चाहते हैं। फिर git stash pop --index 0स्टैश को पॉप करने के लिए उपयोग करें और इसे लागू करें।

नोट: मैं git संस्करण 2.21.0.windows.1 का उपयोग कर रहा हूं


1
आपका उत्तर नाममात्र है कि शीर्ष-रेटेड उत्तर क्या होगा, वर्तमान वाक्य रचना पर इस टिप्पणी को ध्यान में रखते हुएgit stash {push,save}
माइकल - जहां क्ले शिर्की

32

मेरी .zshrcफाइल में ये दो कार्य हैं :

function gitstash() {
    git stash push -m "zsh_stash_name_$1"
}

function gitstashapply() {
    git stash apply $(git stash list | grep "zsh_stash_name_$1" | cut -d: -f1)
}

उनका इस तरह से उपयोग करना:

gitstash nice

gitstashapply nice

"Zsh_stash_name_" क्या है?
सैम हस्लर

1
@SamHasler बस कुछ यादृच्छिक अद्वितीय स्ट्रिंग। यदि आप जानना चाहते हैं कि
स्टेश

उपनाम के प्रशंसकों के लिए सुरुचिपूर्ण समाधान
सार्सेनेगर

22

इस बारे में क्या?

git stash save stashname
git stash apply stash^{/stashname}

1
यह की तरह लगता है ऐसा ही कुछ हुआ करता था स्वीकार किए जाते हैं जवाब है, लेकिन जब से हटा दिया गया है।
माइकल - कहाँ है क्ले शिर्क

हम्म, फिर इसे क्यों हटाया गया?
एडम बी

मुझे नहीं पता, क्योंकि मैंने उत्तर पोस्ट नहीं किया है और 10,000 प्रतिष्ठा नहीं है, लेकिन मुझे लगता है कि यह टिप्पणी के साथ कुछ करना है कि यह काम नहीं करता है: यह दुर्भाग्यपूर्ण है कि git stash apply stash^{/<regex>}यह काम नहीं करता है (यह नहीं है वास्तव में स्टैश सूची खोजें, स्वीकृत उत्तर के तहत टिप्पणियां देखें )।
माइकल - कहाँ है क्ले शिर्क

यह वह उत्तर है जिसकी आप तलाश कर रहे हैं!
kiedysktos

1
1 प्राप्त करने के लिए। मैं git stash listअपने संबंधित इंडेक्स नंबर के साथ स्टैच दिखाता हूँ। फिर मैं जाता हूँ 2. git stash apply 0- जहाँ 0 वह इंडेक्स नंबर है जिसे मैंने पहले कमांड से देखा होगा
उभयलिंगी

8

उपनाम

sapply = "!f() { git stash apply \"$(git stash list | awk -F: --posix -vpat=\"$*\" \"$ 0 ~ pat {print $ 1; exit}\")\"; }; f"

प्रयोग

git sapply "<regex>"

  • विंडोज के लिए Git के साथ संगत

संपादित करें: मैं अपने मूल समाधान पर अड़ा रहा, लेकिन मैं देखता हूं कि बहुमत ईटन रीजनर के संस्करण (ऊपर) को क्यों पसंद करेगा। तो सिर्फ रिकॉर्ड के लिए:

sapply = "!f() { git stash apply \"$(git stash list | grep -E \"$*\" | awk \"{ print $ 1; }\" | sed -n \"s/://;1p\")\"; }; f"

उपयोग awk -F: '{print $1}'करने से पूरी तरह से सेड की आवश्यकता समाप्त हो जाएगी। यह भी एक समारोह में क्यों लपेटें? और का उपयोग कर के awk -F: -vpat="$*" '$0 ~ pat {print $1}'रूप में अच्छी तरह से छोड़ने की अनुमति चाहिए। हालांकि पैटर्न के लिए थोड़ा अलग उद्धरण की आवश्यकता हो सकती है।
इटन रीसनर

@EtanReisner: आपका स्निपेट एक पंक्ति से अधिक आउटपुट करता है।
वेस्टीमिल ओवकास

{print $1; exit}पहली मिलान रेखा के बाद छोड़ने की क्रिया करें ।
एटन रीसनर २ '

@EtanReisner: कुछ परीक्षण के बाद मैं सेड से छुटकारा पा सकता था, लेकिन रैपर और ग्रीप रहता है।
वल्स्टिमिल ओवैस्क

आपको ग्रीप की आवश्यकता नहीं है, हालांकि मैंने कहा कि इसके बिना पैटर्न का उद्धरण भिन्न हो सकता है। मैं रैपर द्वारा मान रहा हूं कि आपके पास शेल फ़ंक्शन है? आपने कभी नहीं समझाया कि आपको क्यों लगता है कि आपको इसकी आवश्यकता है, इसलिए मैं इस पर टिप्पणी नहीं कर सकता कि क्या आप वास्तव में करते हैं, लेकिन मेरा मानना ​​है कि आपको इसकी संभावना नहीं है। (आपको सीधे git stash के बजाय एक शेल को मैन्युअल रूप से इनवॉइस करने की आवश्यकता हो सकती है लेकिन संभवतः वह भी नहीं।)
Etan Reisner

8

यह दुर्भाग्यपूर्ण है कि git stash apply stash^{/<regex>}यह काम नहीं करता है (यह वास्तव में स्टैश सूची की खोज नहीं करता है, स्वीकृत उत्तर के तहत टिप्पणियां देखें )।

यहां ड्रॉप-इन प्रतिस्थापन git stash listहैं जो पहले (सबसे हाल के) को खोजने के लिए regex द्वारा खोज करते हैं stash@{<n>}और फिर उसे पास करते हैं git stash <command>:

# standalone (replace <stash_name> with your regex)
(n=$(git stash list --max-count=1 --grep=<stash_name> | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash show "$n" ; else echo "Error: No stash matches" ; return 1 ; fi)
(n=$(git stash list --max-count=1 --grep=<stash_name> | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash apply "$n" ; else echo "Error: No stash matches" ; return 1 ; fi)
# ~/.gitconfig
[alias]
  sshow = "!f() { n=$(git stash list --max-count=1 --grep=$1 | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash show "$n" ; else echo "Error: No stash matches $1" ; return 1 ; fi }; f"
  sapply = "!f() { n=$(git stash list --max-count=1 --grep=$1 | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash apply "$n" ; else echo "Error: No stash matches $1" ; return 1 ; fi }; f"

# usage:

$ git sshow my_stash
 myfile.txt | 1 +
 1 file changed, 1 insertion(+)

$ git sapply my_stash
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   myfile.txt

no changes added to commit (use "git add" and/or "git commit -a")

ध्यान दें कि उचित परिणाम कोड वापस कर दिए जाते हैं ताकि आप अन्य स्क्रिप्ट्स के भीतर इन कमांड का उपयोग कर सकें। इसके साथ कमांड चलाने के बाद इसे सत्यापित किया जा सकता है:

echo $?

बस चर विस्तार कारनामों के बारे में सावधान रहना चाहिए क्योंकि मैं --grep=$1भाग के बारे में निश्चित नहीं था । यह शायद होना चाहिए, --grep="$1"लेकिन मुझे यकीन नहीं है कि अगर यह रेग्जिम सीमांकक के साथ हस्तक्षेप करेगा (मैं सुझावों के लिए खुला हूं)।


6

यह उत्तर क्लेमेन स्लैवी के लिए बहुत अधिक है। मैंने सिर्फ स्वीकृत उत्तर पर टिप्पणी की होगी लेकिन मेरे पास अभी तक पर्याप्त प्रतिनिधि नहीं हैं :(

आप स्टेश रेफरी को खोजने और शो, आवेदन, ड्रॉप आदि के लिए अन्य उपनामों में इसका उपयोग करने के लिए एक git उपनाम भी जोड़ सकते हैं।

[alias]
    sgrep = "!f() { ref=$(git --no-pager stash list | grep "$1" | cut -d: -f1 | head -n1); echo ${ref:-<no_match>}; }; f"
    sshow = "!f() { git stash show $(git sgrep "$1") -p; }; f"
    sapply = "!f() { git stash apply $(git sgrep "$1"); }; f"
    sdrop = "!f() { git stash drop $(git sgrep "$1"); }; f"

ध्यान दें कि ref=$( ... ); echo ${ref:-<no_match>};पैटर्न का कारण इतना खाली है कि वापस नहीं लौटा है, जो कि नीरसता की वजह से नवीनतम गति को लक्षित करने के लिए sshow, sapply और sdrop का कारण बनेगा क्योंकि कोई भी उम्मीद नहीं करेगा।


1
यह मेरे लिए काम करता है, जबकि स्वीकृत उत्तर काम नहीं करता है (स्वीकृत उत्तर पर मेरी प्रशंसा देखें)
Jan Rüegg

4

उपनाम यह एक फ़ंक्शन में एनकैप्सुलेट करने की आवश्यकता के बिना यूनिक्स जैसी प्रणालियों के लिए एक अधिक प्रत्यक्ष वाक्यविन्यास हो सकता है। [/ उपनाम] के तहत ~ / .gitconfig में निम्नलिखित जोड़ें

sshow = !sh -c 'git stash show stash^{/$*} -p' -
sapply = !sh -c 'git stash apply stash^{/$*}' -
ssave = !sh -c 'git stash save "${1}"' -

उपयोग: sapply regex

उदाहरण: git sshow MySecretStash

अंत में हाइफ़न कहते हैं कि मानक इनपुट से इनपुट लें।


4

स्टाश की संख्या को देखने के लिए एक छोटी बैश स्क्रिप्ट का उपयोग करें। इसे "gitapply" कहें:

NAME="$1"
if [[ -z "$NAME" ]]; then echo "usage: gitapply [name]"; exit; fi
git stash apply $(git stash list | grep "$NAME" | cut -d: -f1)

उपयोग:

gitapply foo

... जहां फू आप चाहते हैं के नाम का एक विकल्प है।


3

git stash save NAMEबचाने के लिए उपयोग करें ।

तब ... आप इस स्क्रिप्ट का उपयोग करके चुन सकते हैं कि कौन सा आवेदन करें (या पॉप):

#!/usr/bin/env ruby
#git-stash-pick by Dan Rosenstark

# can take a command, default is apply
command = ARGV[0]
command = "apply" if !command
ARGV.clear

stashes = []
stashNames = []
`git stash list`.split("\n").each_with_index { |line, index|
    lineSplit = line.split(": ");
    puts "#{index+1}. #{lineSplit[2]}"
    stashes[index] = lineSplit[0]
    stashNames[index] = lineSplit[2]
}
print "Choose Stash or ENTER to exit: "
input = gets.chomp
if input.to_i.to_s == input
    realIndex = input.to_i - 1
    puts "\n\nDoing #{command} to #{stashNames[realIndex]}\n\n"
    puts `git stash #{command} #{stashes[realIndex]}`
end

मुझे स्टैम्स के नाम देखना और चुनना पसंद है। इसके अलावा, मैं Zshell का उपयोग करता हूं और स्पष्ट रूप से नहीं जानता कि ऊपर के कुछ बैश उपनामों का उपयोग कैसे करें;)

नोट: जैसा कि केविन कहते हैं, आपको इसके बजाय टैग और चेरी-पिक्स का उपयोग करना चाहिए।


git stash saveके पक्ष में पदावनत किया जाता है git stash push
व्रणवूड

2

यह PowerShell का उपयोग करके इसे पूरा करने का एक तरीका है:

<#
.SYNOPSIS
Restores (applies) a previously saved stash based on full or partial stash name.

.DESCRIPTION
Restores (applies) a previously saved stash based on full or partial stash name and then optionally drops the stash. Can be used regardless of whether "git stash save" was done or just "git stash". If no stash matches a message is given. If multiple stashes match a message is given along with matching stash info.

.PARAMETER message
A full or partial stash message name (see right side output of "git stash list"). Can also be "@stash{N}" where N is 0 based stash index.

.PARAMETER drop
If -drop is specified, the matching stash is dropped after being applied.

.EXAMPLE
Restore-Stash "Readme change"
Apply-Stash MyStashName
Apply-Stash MyStashName -drop
Apply-Stash "stash@{0}"
#>
function Restore-Stash  {
    [CmdletBinding()]
    [Alias("Apply-Stash")]
    PARAM (
        [Parameter(Mandatory=$true)] $message,         
        [switch]$drop
    )

    $stashId = $null

    if ($message -match "stash@{") {
        $stashId = $message
    }

    if (!$stashId) {
        $matches = git stash list | Where-Object { $_ -match $message }

        if (!$matches) {
            Write-Warning "No stashes found with message matching '$message' - check git stash list"
            return
        }

        if ($matches.Count -gt 1) {
            Write-Warning "Found $($matches.Count) matches for '$message'. Refine message or pass 'stash{@N}' to this function or git stash apply"
            return $matches
        }

        $parts = $matches -split ':'
        $stashId = $parts[0]
    }

    git stash apply ''$stashId''

    if ($drop) {
        git stash drop ''$stashId''
    }
}

अधिक जानकारी यहाँ



1

यहां पार्टी में देर हो जाती है, लेकिन यदि VSCode का उपयोग किया जाता है, तो ऐसा करने का एक त्वरित तरीका कमांड पैलेट (CTRL / CMD + SHIFT + P) को खोलना है और "पॉप स्लैश" टाइप करना है, आप अपना स्टाश नाम से प्राप्त कर पाएंगे। git CLI का उपयोग करने की आवश्यकता के बिना


1

git stash applyके अलावा अन्य रेफरी के साथ भी काम करता है stash@{0}। तो आप एक सामान्य नाम पाने के लिए साधारण टैग का उपयोग कर सकते हैं । इसका यह भी लाभ है कि आप आकस्मिक git stash dropया git stash popयह नहीं कर सकते ।

तो आप pstashइस तरह एक उपनाम (उर्फ "लगातार संघर्ष") को परिभाषित कर सकते हैं :

git config --global alias.pstash '!f(){ git stash && git tag "$1" stash && git stash drop; }; f'

अब आप एक टैग की गई कड़ी बना सकते हैं:

git pstash x-important-stuff

और showऔर applyहमेशा की तरह फिर से:

git stash show x-important-stuff
git stash apply x-important-stuff

0

मुझे नहीं लगता कि इसके नाम से पॉप को एक हिट करने का कोई तरीका है।

मैंने एक बैश फ़ंक्शन बनाया है जो इसे करता है।

#!/bin/bash

function gstashpop {
  IFS="
"
  [ -z "$1" ] && { echo "provide a stash name"; return; }
  index=$(git stash list | grep -e ': '"$1"'$' | cut -f1 -d:)
  [ "" == "$index" ] && { echo "stash name $1 not found"; return; }
  git stash apply "$index"
}

उपयोग का उदाहरण:

[~/code/site] on master*
$ git stash push -m"here the stash name"
Saved working directory and index state On master: here the stash name

[~/code/site] on master
$ git stash list
stash@{0}: On master: here the stash name

[~/code/site] on master
$ gstashpop "here the stash name"

मुझे उम्मीद है यह मदद करेगा!


0

स्टैश निर्माण के अलावा सब कुछ के लिए, मैं एक निर्भरता के रूप में fzf को शुरू करके एक और समाधान का प्रस्ताव देता हूं । मैं आपके समय के 5 मिनट लेने की सलाह देता हूं और इससे परिचित हो जाता हूं, क्योंकि यह ओवरऑल महान उत्पादकता बूस्टर है।

वैसे भी, उनके उदाहरण पृष्ठ से संबंधित एक अंश जो खोज की पेशकश कर रहा है। अतिरिक्त कार्यक्षमता जोड़ने के लिए स्क्रिप्ट को बदलना बहुत आसान है (जैसे कि स्टेश एप्लिकेशन या ड्रॉपिंग):

fstash() {
    local out q k sha
    while out=$(
            git stash list --pretty="%C(yellow)%h %>(14)%Cgreen%cr %C(blue)%gs" |
            fzf --ansi --no-sort --query="$q" --print-query \
                --expect=ctrl-d,ctrl-b); do
        mapfile -t out <<< "$out"
        q="${out[0]}"
        k="${out[1]}"
        sha="${out[-1]}"
        sha="${sha%% *}"
        [[ -z "$sha" ]] && continue
        if [[ "$k" == 'ctrl-d' ]]; then
            git diff $sha
        elif [[ "$k" == 'ctrl-b' ]]; then
            git stash branch "stash-$sha" $sha
            break;
        else
            git stash show -p $sha
        fi
    done
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.