গিটের নামে কীভাবে স্ট্যাশ নামকরণ এবং পুনরুদ্ধার করবেন?


1417

আমি সর্বদা এই ধারণাটিতে ছিলাম যে আপনি কাজ করে কোনও স্ট্যাশকে একটি নাম দিতে পারেন git stash save stashname, যা পরে আপনি প্রয়োগ করে প্রয়োগ করতে পারেন git stash apply stashname। তবে মনে হয় এই ক্ষেত্রে যা ঘটেছিল তা হ'ল stashnameস্ট্যাশ বিবরণ হিসাবে ব্যবহৃত হবে।

আসলে কোনও স্ট্যাশ নাম দেওয়ার কোনও উপায় নেই? যদি তা না হয় তবে আপনি সমতুল্য কার্যকারিতা অর্জনের জন্য কী প্রস্তাব করবেন? মূলত আমার একটি ছোট স্ট্যাশ রয়েছে যা আমি পর্যায়ক্রমে প্রয়োগ করতে চাই, তবে সর্বদা git stash listএটির প্রকৃত সংখ্যার সংখ্যাটি কী তা অনুসন্ধান করতে চাই না ।


67
git stash push -m stashnameহয় বর্তমান সিনট্যাক্সgit stash save stashnameঅবচয় করা হয়েছে।
শেরিলহোমান 18

1
গিট স্ট্যাশ পুশ-মি স্ট্যাশনাম 2.8.0.windows.1 এ কাজ করে না।
জ্যাক

উইন্ডোজ 2.26.0 এর জন্য গিট কিছুদিন আগে প্রকাশিত হয়েছে। সম্ভবত এটি এখন স্থির। github.com/git- for
windows/

উত্তর:


813

আপনি এটি এইভাবে করেন:

git stash save "my_stash"

"my_stash"স্ট্যাশ নাম কোথায় ।

আরও কিছু দরকারী জিনিস জানার জন্য: সমস্ত স্ট্যাশ স্ট্যাকের মধ্যে সংরক্ষণ করা হয়। টাইপ করুন:

git stash list

এটি আপনার সমস্ত স্ট্যাশাকে নীচে তালিকাবদ্ধ করবে।

স্ট্যাশ প্রয়োগ করতে এবং এটি স্ট্যাশ স্ট্যাক থেকে অপসারণ করতে, টাইপ করুন:

git stash pop stash@{n}

স্ট্যাশ প্রয়োগ করতে এবং এটি স্ট্যাশ স্ট্যাকের মধ্যে রাখতে টাইপ করুন:

git stash apply stash@{n}

nস্ট্যাশড পরিবর্তনের সূচকটি কোথায় ।


88
এটি প্রশ্নের উত্তর দেয় না। ডিফল্টরূপে আপনি আপনার স্ট্যাশের জন্য সংখ্যার গুচ্ছ দিয়ে শেষ করেন, তবে কীভাবে আপনি সহজে সনাক্ত করতে একটি নাম রাখতে পারেন তা উত্তর দেয় না।
গুডস্পিনিপিডি

16
ওপি স্পষ্টভাবে কাস্টম নামের জন্য বিশ্রীভাবে নামযুক্ত স্ট্যাশ @ {n} নামগুলি এড়াতে চেষ্টা করছে। git stash apply <custom-name>
স্টিউসওয়ার্ডে

10
নাম দ্বারা স্ট্যাশ পুনরুদ্ধার সম্পর্কে প্রশ্নের উত্তর দেয় না।
নালস্টেফ

45
git stash push -m my_stashহয় বর্তমান সিনট্যাক্সgit stash save my_stashঅবচয় করা হয়েছে।
শেরিলহোমান 18

21
এটি অপ্রাসঙ্গিক নয়। এটা কার্যকরী.
গায়ান ওয়েরাকুট্টি

436

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}

তথ্যসূত্র গিট স্ট্যাশ ম্যান পৃষ্ঠা


9
সিনট্যাক্সের pushচেয়ে ডক্সগুলি দেখানো হচ্ছে save: গিট স্ট্যাশ পুশ
শেরিলহোম্যান

30
এটিই আসল উত্তর। দুর্ভাগ্যক্রমে, এটির উপরে অনেক পুরানো উত্তর রয়েছে।
malan

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}'পালাতে }এবং {একটি ব্যাকটিক with সহ
লসম্যানোস

104

আপনি যদি পর্যাপ্ত পরিমাণে গুরুত্বপূর্ণ মনে করেন তবে আপনি স্ট্যাশকে একটি শাখায় পরিণত করতে পারেন:

git stash branch <branchname> [<stash>]

ম্যান পেজ থেকে:

এটি মূলত তৈরি <branchname>হওয়া প্রতিশ্রুতি থেকে শুরু করে একটি নতুন শাখা তৈরি করে এবং এটি পরীক্ষা করে , নতুন কার্যকারী বৃক্ষ এবং সূচীতে <stash>রেকর্ডকৃত পরিবর্তনগুলি প্রয়োগ করে <stash>, তারপর <stash>যদি তা সফলভাবে সম্পূর্ণ হয় তবে এটি ড্রপ করে । যখন কোনও <stash>দেওয়া হয় না, সর্বশেষটি প্রয়োগ করে।

আপনি যদি যে শাখায় দৌড়েছিলেন তা যে শাখায় git stash saveপর্যাপ্ত পরিবর্তন হয়েছে যে গিট স্ট্যাশ প্রয়োগ রয়েছে তা দ্বন্দ্বের কারণে ব্যর্থ হলে এটি কার্যকর This যেহেতু গিট স্ট্যাশ চলাকালীন সময়ে প্রধান ছিল সেই প্রতিশ্রুতির উপরে স্ট্যাশ প্রয়োগ করা হয়েছে, সুতরাং এটি কোনও দ্বন্দ্ব ছাড়াই মূলত স্ট্যাশড রাষ্ট্রটিকে পুনরুদ্ধার করে।

পরে আপনি এই নতুন শাখাটি অন্য কোনও স্থানে পুনর্বাসিত করতে পারেন যা আপনি যখন স্ট্যাশ করার সময় ছিলেন সেখানেই ছিলেন descend


1
যেহেতু শাখাগুলি গিটের তুলনায় বেশ সস্তা, এই পরামর্শটি আমার পক্ষে সবচেয়ে কার্যকর।
জয়ান

5
অবশ্যই, তবে আপনি যদি ওপি জিজ্ঞাসা করছেন, এই স্ট্যাশটিকে পরে বিভিন্ন শাখায় পুনরায় প্রয়োগ করতে চান তবে এটি কোনও লাভ করে না। আপনি এর মাথা চেরি নিতে হবে।
স্টিভস্কয়ার্ড

@ অ্যাডামডিমিটরুক পপিং না করে স্ট্যাশ রাখার সময় এটি করার কোনও উপায় আছে কি? (লাইক ইন git stash apply)
কাসুন সিয়ামম্বলপিতিয়া

আশ্চর্যের বিষয় হল, যখন আমি এটি চেষ্টা করলাম তখন আমি একটি ত্রুটি বার্তা পেয়েছি যে আমার একটি ফাইল চেক আউট করার সময় ওভাররাইট করা হবে এবং আমার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ বা স্ট্যাশ করতে হবে (!)। git stash push -m 'name'কাজ করছে.
ওয়ার্টওয়ার্ট

পছন্দ করুন মনের অজান্তে.
ড্যান

74

আপনি যদি আপনার বর্তমান চলতি কপির কিছু বা সমস্ত পরিবর্তনগুলি সংরক্ষণ করার জন্য হালকা ওজনের উপায় খুঁজছেন এবং পরে ইচ্ছামত সেগুলি পুনরায় আবেদন করেন, তবে প্যাচ ফাইলটি বিবেচনা করুন:

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

# re-apply it later
git apply some.patch

আমি এখনই অবাক হয়েছি যদি এর জন্য স্ট্যাশ ব্যবহার করা উচিত এবং তারপরে আমি পাগলের মতো জিনিস দেখতে পাই এবং আমি যা করছি তাতে সন্তুষ্ট :)


2
এই হল! ধন্যবাদ. আমি .patch ফাইলগুলি উপেক্ষা করার জন্য আমার .gitignore আপডেট করেছি এবং আমি যত খুশি প্যাচ প্রস্তুত করতে প্রস্তুত set
লিঙ্গস

আমি প্রশ্নের পিছনে অভিপ্রায়টি দেখতে পাচ্ছি, যা হ'ল প্রতিবার আপনি মাস্টার থেকে কোনও শাখা বের করেন এবং সেগুলি প্রতিশ্রুতিবদ্ধ না করে কিছু স্থানীয় পরিবর্তন প্রয়োগ করা উচিত। সুতরাং, সম্ভবত প্রশ্নটি সংশোধন করা উচিত ছিল এবং এই উত্তরটিকে সমাধান হিসাবে গ্রহণ করা উচিত ছিল। পাশাপাশি সহজ।
অংক

46

স্ট্যাশগুলি আপনার পছন্দ মতো স্থায়ী জিনিস হিসাবে বোঝানো হয় না। কমিটে ট্যাগ ব্যবহার করে আপনাকে সম্ভবত আরও ভাল পরিবেশন করা হবে। আপনি যে জিনিস লুকিয়ে রাখতে চান তা তৈরি করুন। এটি থেকে একটি প্রতিশ্রুতিবদ্ধ। প্রতিশ্রুতিবদ্ধ জন্য একটি ট্যাগ তৈরি করুন। তারপরে আপনার শাখাটি আবার রোল করুন HEAD^। এখন আপনি যখন সেই স্ট্যাশ পুনরায় প্রয়োগ করতে চান আপনি git cherry-pick -n tagname( -nতা --no-commit) ব্যবহার করতে পারেন ।


1
অবশ্যই এই পদ্ধতির মতো, named commitকোথাও কোথাও ফাঁসির জন্য কিছুটা ক্লিনার মনে হচ্ছে । কেবলমাত্র হালকা বিরক্তি হ'ল এটি চেরি বাছাইয়ের জন্য প্রতিশ্রুতিবদ্ধ হয় না এবং ভিন্নতাতে থাকে, যার অর্থ এটি পরবর্তী কমিটের সময় ম্যানুয়ালি চেক ইন করা দরকার।
আদিত্য এমপি

1
এটি নিকটতম। আমি মনে করি আমি এটির জন্য কিছু উপার্জন করব। বর্ণনাটি "নাম" হিসাবে ব্যবহার করা পছন্দ করি না।
স্টিউসওয়ার্ডে

লজ্জাজনকভাবে সূচকে যুক্ত হয় এবং আপনাকে পুনরায় সেট করতে হবে, কারও উচিত একটি --no-stageবিকল্প প্যাচ করা উচিত ! সংশ্লিষ্ট: stackoverflow.com/questions/32333383/...
সিরো Santilli冠状病毒审查六四事件法轮功

40

git stash push -m aNameForYourStashএটি সংরক্ষণ করতে ব্যবহার করুন। তারপরে আপনি যে স্ট্যাশ প্রয়োগ করতে চান git stash listতার সূচি শিখতে ব্যবহার করুন । তারপরে git stash pop --index 0স্ট্যাশ পপ করতে এবং এটি প্রয়োগ করুন।

দ্রষ্টব্য: আমি গিট সংস্করণ 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
@ সামহ্যাসলার কেবল কিছু এলোমেলো অনন্য স্ট্রিং। আপনি যদি জানতে চান যে
স্ট্যাশগুলি

ওরফে ভক্তদের জন্য মার্জিত সমাধান
সুরসনেগার

21

এই সম্পর্কে কি?

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

1
এটি গ্রহণযোগ্য উত্তর হিসাবে ব্যবহৃত হত এমন কিছু বলে মনে হচ্ছে তবে এটি মুছে ফেলা হয়েছে।
মাইকেল - ক্লে শিরকি

এইচএম, তাহলে কেন এটি মোছা হয়েছিল?
অ্যাডামবি

আমি জানি না, যেহেতু আমি উত্তরটি পোস্ট করি নি এবং 10,000 টি খ্যাতি নেই, তবে আমি মনে করি যে মন্তব্যগুলি এটির কাজ করে না বলে কিছু করার আছে: এটি দুর্ভাগ্যজনক যে git stash apply stash^{/<regex>}কাজ করে না (এটি হয় না) আসলে স্ট্যাশ তালিকাটি অনুসন্ধান করুন, গৃহীত উত্তরের নীচে মন্তব্যগুলি দেখুন )।
মাইকেল - ক্লে শিরকি

এই উত্তর আপনি খুঁজছেন!
kiedysktos

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>"

  • উইন্ডোজের জন্য গিটের সাথে সামঞ্জস্যপূর্ণ

সম্পাদনা: আমি আমার আসল সমাধানটির প্রতি দৃ .় ছিলাম তবে আমি দেখতে পাচ্ছি কেন সংখ্যাগরিষ্ঠরা এটান রিজনারের সংস্করণটিকে (উপরে) পছন্দ করবে। সুতরাং কেবল রেকর্ডের জন্য:

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}'ফলে গ্রেপটিকেও ছাড়ার অনুমতি দেওয়া উচিত। যদিও প্যাটার্নটির জন্য কিছুটা আলাদা উদ্ধৃতি লাগতে পারে।
ইটান রেইজনার

@ ইটানরাইজনার: আপনার স্নিপেট একাধিক লাইনের আউটপুট দেয়।
ভ্লাস্টিমিল ওভেক

{print $1; exit}প্রথম মিলিত লাইনের পরে ছাড়ার জন্য অ্যাকশনটি করুন ।
এটান রিজনার

@ ইটানরাইজনার: কিছু পরীক্ষার পরে আমি সেড থেকে মুক্তি পেতে পারি, তবে মোড়ক এবং গ্রেপ থাকে।
ভ্লাস্টিমিল ওভেক

আপনার গ্রেপ লাগবে না যদিও আমি বলেছিলাম যে প্যাটার্নের উদ্ধৃতিটি ছাড়া এটি আলাদা হতে পারে। আমি মোড়কে ধরে নিচ্ছি আপনি শেল ফাংশনটি বোঝাচ্ছেন? আপনি কখনই আপনার প্রয়োজন বলে কেন তা ব্যাখ্যা করেন নি তাই আপনি আসলে করছেন কিনা তা নিয়ে আমি মন্তব্য করতে পারি না তবে আমি বিশ্বাস করি আপনি সম্ভবত এটি করেন না। (আপনাকে সরাসরি গিট স্ট্যাশের পরিবর্তে সরাসরি শেলটি চাওয়ার প্রয়োজন হতে পারে তবে এটি সম্ভবত নাও হতে পারে))
এটান রিজনার

8

এটি দুর্ভাগ্যজনক যে git stash apply stash^{/<regex>}কাজ করে না (এটি আসলে স্ট্যাশ তালিকার অনুসন্ধান করে না, গৃহীত উত্তরের নীচে মন্তব্যগুলি দেখুন )।

এখানে ড্রপ-ইন প্রতিস্থাপনগুলি রয়েছে যা git stash listপ্রথম (সর্বাধিক সাম্প্রতিক) সন্ধান করার জন্য রেজেক্স দ্বারা অনুসন্ধান করে 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

এই উত্তরটি ক্লিমেন স্লাভিয়ার কাছে অনেক čণী č আমি কেবলমাত্র গৃহীত উত্তরের বিষয়ে মন্তব্য করব তবে আমার কাছে এখনও যথেষ্ট প্রতিনিধি নেই :(

আপনি স্ট্যাশ রেফটি খুঁজে পেতে এবং গিটারের অন্যান্য নাম যুক্ত করতে পারেন, এটি প্রদর্শন, প্রয়োগ, ড্রপ ইত্যাদির জন্য অন্যান্য উপকরণে ব্যবহার করতে পারেন

[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>};প্যাটার্নটির কারণ তাই একটি ফাঁকা স্ট্রিং ফেরত দেওয়া হয়নি যার ফলে শো আশা, সাপ্লাই এবং এসড্রপকে প্রত্যাশা মতো ব্যর্থ হওয়ার পরিবর্তে সর্বশেষ স্ট্যাশকে টার্গেট করতে হবে।


1
এটি আমার পক্ষে কাজ করে যখন গৃহীত উত্তরগুলি কাজ করে না বলে মনে হয় (স্বীকৃত উত্তরের জন্য আমার প্রশংসা দেখুন)
জান রিজেগ

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

উদাহরণ: গিট শো মাইক্রিট স্ট্যাশ

শেষে হাইফেন বলে স্ট্যান্ডার্ড ইনপুট থেকে ইনপুট নিন।


4

স্ট্যাশের সংখ্যা অনুসন্ধান করতে একটি ছোট বাশ স্ক্রিপ্ট ব্যবহার করুন। এটিকে "গিট্যাপলি" বলুন:

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

... যেখানে 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

আমি স্ট্যাশগুলির নামগুলি দেখতে এবং চয়ন করতে সক্ষম হতে পছন্দ করি। এছাড়াও আমি ঝেহেল ব্যবহার করি এবং স্পষ্টভাবে জানতাম না যে উপরের কিছু বাশ এলিয়াস কীভাবে ব্যবহার করতে হয়;)

দ্রষ্টব্য: কেভিন যেমন বলেছেন, আপনার পরিবর্তে ট্যাগ এবং চেরি-পিকগুলি ব্যবহার করা উচিত।


git stash saveপক্ষে হ্রাস করা হয় git stash push
শ্রাবণ

2

পাওয়ারশেল ব্যবহার করে এটি সম্পাদন করার এটি একটি উপায়:

<#
.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

এখানে পার্টিতে দেরীতে, তবে যদি ভিএসকোড ব্যবহার করে তাড়াতাড়ি করার উপায়টি হ'ল কমান্ড প্যালেটটি (সিটিআরএল / সিএমডি + শিফট + পি) খুলুন এবং "পপ স্ট্যাশ" টাইপ করুন, আপনি নিজের স্ট্যাশ নাম অনুসারে পুনরুদ্ধার করতে সক্ষম হবেন গিট সি এল এল ব্যবহার করার প্রয়োজন ছাড়াই


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
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.