গিট স্ট্যাশ শাখা-নির্দিষ্ট বা পুরো সংগ্রহস্থলের জন্য?


95

আমি একটি শাখায় গিয়ে কিছু কাজ করেছি। আমি অন্য শাখা ঢোকা চেয়েছিলেন কিন্তু তাই আমি করেনি কমিট করতে চান না git stash। তারপরে আমি করলাম git checkout <otherbranch>। আমি সেখানে কিছু কাজ করেছি এবং, যেমন প্রথম শাখার মতো, আমিও কাজটি করার আগে এটি থেকে স্যুইচ আউট করতে চেয়েছিলাম। তাই আমি git stashসেখানেও করেছি । আমি প্রথম শাখায় ফিরে গেলাম এবং git stash popএটি নির্দিষ্ট করে দেওয়া শাখাটি থেকে স্ট্যাশ পাবেন বলে ভেবে এটি আনস্টাশ করার চেষ্টা করেছি । আমি অবাক হয়েছি যে এটি স্ট্যাশটিকে <otherbranch>(সর্বশেষ স্ট্যাশেড ) থেকে আনস্ট্যাশ করেছে । আমি এই ছাপের মধ্যে ছিলাম যে স্ট্যাশগুলি শাখা-নির্দিষ্ট তবে এই আচরণটি ইঙ্গিত দেয় যে পুরো স্থানীয় সংগ্রহস্থলের জন্য কেবল একটি স্ট্যাশ রয়েছে।

Is git stashশাখা-নির্দিষ্ট অথবা পুরো সংগ্রহস্থলের জন্য? এটি যদি পুরো সংগ্রহস্থলের জন্য হয় তবে আমি কী এটিকে শাখা-নির্দিষ্ট করে তুলতে বিকল্পগুলি পাস করতে পারি?

উত্তর:


43

বর্তমান স্ট্যাশ স্ট্যাকটি দেখতে:

git stash list

স্ট্যাক থেকে একটি নির্দিষ্ট স্ট্যাশ বাছাই করতে, এটি উপরে দেখানো দ্বারা উল্লেখ করুন।stash@{number}

যদি আপনি আচরণটি প্রতি শাখায় পরিণত হতে চান তবে আপনি কেবল শাখায় একটি প্রতিশ্রুতিবদ্ধ (বা একাধিক কমিট) করতে পারেন। আপনি পরে সর্বদা কমিট (গুলি) "আনমেক" করতে পারেন (উদাহরণস্বরূপ, হয় git reset, হয় --softঅথবা --mixed; গিট রিসেট ডকুমেন্টেশন সহ ; বা git rebase -iকেবলমাত্র অস্থায়ীগুলি বাতিল করার সময় কেবল "আসল" কমিট (গুলি) রাখতে পারেন)।

(সত্যিই অনুকরণ git stash, আপনি অন্তত দুই করে সূচক রাষ্ট্রপক্ষে এক এবং কাজ-গাছ রাষ্ট্রপক্ষে এক প্রয়োজন। আপনি সংরক্ষণ এবং সূচক রাষ্ট্র পুনঃস্থাপন করার পরিকল্পনা না করে থাকেন, যদিও, আপনি শুধু করতে পারেন git add -Aসমগ্র কাজ-ট্রি রাষ্ট্র এবং যে অস্থায়ী কমিট করা। অন্যথা, git stashযাতে আপনি কপি এবং প্রশংসনীয় সহজে এটি পরিবর্তন এটা প্রতি শাখা ডিফল্টরূপে কাজ করে, ব্যবহার করে, যেমন, করতে পারে একটি শেল স্ক্রিপ্ট হয় তার কাজ নাম-স্পেস হিসাবে, বরং একক বিশ্বব্যাপী চেয়ে জন্য পুরো রেপো stillrefs/pb-stash/branchrefs/stash


আপনি কি জানেন stash listযে কেবলমাত্র বিবরণ ছাড়াও প্রতিটি আইটেমের ফাইল তালিকা প্রদর্শন করতে হয় ?
উভচর

4
git stash show(বা সংস্করণ git stash show stash@{<number>}ব্যতীত অন্য কোনও কিছুর জন্য @{0}) আপনাকে একটি দেয় diff --stat; -pএকটি বৃহত্তর ভিন্নতা পেতে যোগ করুন । দ্রষ্টব্য: এটি "স্ট্যাশ ব্যাগ" এর "কাজের গাছ" এর সাথে তুলনা করে যে প্রতিশ্রুতি থেকে এটি ঝুলছে তার বিপরীতে; প্রদত্ত স্ট্যাশ-ব্যাগের "সূচক" এ কী আছে তা দেখার জন্য কোনও ফ্রন্ট-এন্ড ইন্টারফেস নেই।
টেরিক

55

নং এবং নং গিট স্ট্যাশ প্রতি-সংগ্রহস্থল।

এটি কীভাবে ব্যবহার করবেন সে সম্পর্কে একটি সুন্দর পৃষ্ঠা এখানে


দ্বিতীয় স্ট্যাশ প্রথমটি ওভাররাইট করে? IOW, আমি যদি দুটি স্ট্যাশ করি তবে এর মধ্যে কোনও স্টেস্ট না করে, আমি কি প্রথম স্ট্যাশ হারাব?
উভচর

4
নাহ, আপনি স্ট্যাশের একটি স্ট্যাক (সর্বশেষে প্রথম-আউট) পাবেন। আপনি আপনার স্ট্যাশ-স্ট্যাকের দিকে কোনও স্ট্যাশ
ঠেকান

18

git stash প্রতি শাখা নয়।

  • এর পরিবর্তে git stash(যখন আপনার প্রচুর স্ট্যাশ এবং শাখা থাকবে তখন সহজেই হারিয়ে যেতে পারে)
  • আমি git commitআপনার শাখায় অসম্পূর্ণ কোড সংরক্ষণ করার জন্য একটি করার পরামর্শ দিচ্ছি এবং আপনি কোডটি শেষ করতে প্রস্তুত git reset ${COMMIT_HASH_VALUE}হলে অসমাপ্ত কোডটি ফিরে পেতে একটি করুন
  • git commitএবং git resetযখন সঠিকভাবে একসাথে ব্যবহৃত হয় তখন git stashএকটি নির্দিষ্ট শাখার জন্য একটি অনুকরণ করতে পারে

এখানে বাস্তবের একটি সাধারণ দৃশ্য যা মান এবং তার ব্যবহার commitএবং resetআদেশগুলি ব্যবহার করে তা দেখায় :

  • আপনি বৈশিষ্ট্য শাখা এক্স এ কাজ করছেন এবং আপনার কোডগুলি পরীক্ষাগুলি সংকলন বা পাসও করে না
  • একটি ত্রুটি রয়েছে যা বর্তমান নতুন বৈশিষ্ট্যের চেয়ে উচ্চ অগ্রাধিকার এবং তাই আপনাকে অবশ্যই ত্রুটি ফিক্সের সাথে সাথে কাজ শুরু করতে হবে
  • গিট স্ট্যাশ না করে (এবং স্ট্যাশ মিশ্রণে হারিয়ে যায় কারণ আপনার অনেক স্ট্যাস এবং অনেকগুলি শাখা রয়েছে)
  • আপনি git commitবৈশিষ্ট্য শাখা এক্স উপর একটি করতে পারেন
    • COMMIT_HASH_VALUEপরে লিখুন
  • হট ফিক্সের জন্য একটি নতুন শাখা ওয়াই চেকআউট করুন
  • শাখা ওয়ায় হট ফিক্স শেষ করুন (বেসলাইনটিতে গরম ফিক্সটি পেতে এবং হট ফিক্স শাখাটি মোছার জন্য একত্রীকরণের অনুরোধ করুন)
  • তারপরে ফিচার শাখা এক্স আবার পরীক্ষা করে দেখুন
  • আপনার অসম্পূর্ণ কাজটি পপ করতে যা পরীক্ষার সংকলন বা পাস করে না -> কেবল একটি করুন git reset ${COMMIT_HASH_VALUE}

(এফওয়াইআই এর জন্য ডিফল্ট git resetহ'ল --mixed)


4
এই দৃশ্যে পুনরায় সেট করার জন্য একটি সহজ শর্টকাট git reset HEAD~1
স্যাম এ। হরভাথ-হান্ট

4
@ স্যামএইচএইচএইচ, আমার গিট রিসেট হেড ^ 1 এর সাথে একাধিক ঘটনা ঘটেছে যা ঘটনাক্রমে দু'বার আঘাত হানা ... তাই আমি ব্যবহার না করা HEAD^1বা বেছে নেওয়ার পছন্দ করি HEAD~1
ট্রেভর বয়ড স্মিথ

11

আমি নিশ্চিত নই কেন এখানে প্রতিটি উত্তর commit+ দিয়ে স্ট্যাশস অনুকরণ করার পরামর্শ দেয় reset। স্ট্যাশ ব্যবহার করার জন্য পুরোপুরি জরিমানা, বিশেষত একাধিক শাখায় কাজ করার সময়। আমি একাধিক শাখায় কাজ করার সময়ও প্রতিশ্রুতি রাখতে চাই না, কারণ আমি চাই যে আমি ফিরে আসার পরে আমার সম্পাদনায় সমস্ত পরিবর্তিত পরিবর্তনগুলি হাইলাইট করা আছে।

সুতরাং এখানে স্ট্যাশ ওয়ার্কফ্লো রয়েছে:

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

git stash save "Your custom stash message"

আপনি যখন কোন শাখায় ফিরে আসেন, তখন স্ট্যাশ চেকআউট করুন

git stash list

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি শাখায় থাকেন তবে FixIssue0203আপনি ব্যবহার করতে পারেন git stash popকারণ এটি শীর্ষটি প্রয়োগ করবে stash@{0}এবং এটি স্ট্যাশ থেকে সরিয়ে ফেলবে।

তবে আপনার শাখায় যদি আপনার ImproveReadmeপ্রথমে স্ট্যাশ 1 প্রয়োগ করা উচিত git stash apply stash@{1}এবং তারপরে স্ট্যাক 1 থেকে স্ট্যাশ 1 সরিয়ে ফেলুন git stash drop stash@{1}

এটাই!

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