গিট স্ট্যাশ করার উদ্দেশ্যে ব্যবহারের ক্ষেত্রে কী?


143

আমি যদি শাখা A তে কাজ করি এবং হঠাৎ করে শাখা A তে প্রতিশ্রুতিবদ্ধ হওয়ার আগে প্রস্তুত হওয়ার আগে শাখা বিতে কাজ করার দরকার পড়ে, আমি আমার পরিবর্তনগুলি এ, চেকআউট বিতে, আমার কাজটি সেখানে রাখি, তারপরে এটিকে চেকআউট করব এবং স্ট্যাশ প্রয়োগ করব।

আমি যদি এ-তে কাজ করি এবং আমি দিনের জন্য কাজ বন্ধ করতে চাই, আমি কি আমার কাজটি লুকিয়ে রেখে পরের দিন প্রয়োগ করব (যখন আমি আমার কাজটি আবার শুরু করব), অথবা আমি কেবল জিনিসগুলি যেমন leave অনির্ধারিত পরিবর্তিত ফাইল হ'ল ছেড়ে দিতে পারি কাজ ডিরেক্টরি? সুরক্ষার কিছু সুবিধা থাকলে কেবল এই ক্ষেত্রে কেন আমাকে স্ট্যাশ ব্যবহারের প্রয়োজন হবে তা আমি দেখতে পাচ্ছি না।

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


3
আপনার কোম্পানির নীতিগুলির উপর নির্ভর করে যদি কোনও হয় any আপনি কীভাবে "গৃহীত" উত্তরটি বেছে নেবেন?
ডিমন পেইন্টার

1
এই প্রশ্নের যেমন phrased মাত্র মতামত চাইছে (আমি Git ব্যবহার করা উচিত এই উপায় বা যে পথ?) এবং এইভাবে বন্ধ বা সম্পাদনা করা উচিত নয়।
টাইলারএইচ

উত্তর:


161

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

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

# Assume the latest commit was already done
# start working on the next patch, and discovered I was missing something

# stash away the current mess I made
git stash save

# some changes in the working dir

# and now add them to the last commit:
git add -u
git commit --amend

# back to work!
git stash pop

2
আপনি যে জিনিসটি যুক্ত করেছেন তা কি এটি স্টেশ অফ করে দিলে তা স্ট্যাশের সাথে মিশে যায়? (টাইমলাইনটি গিটে কীভাবে কাজ করে তা নিয়ে আমি এখনও নড়বড়ে হয়েছি - আমি ধরে নিই যে আপনি ইতিহাস ওভাররাইট করছেন ??)
কিকি জয়েল

@ কিকিজেভেল পপড পরিবর্তনগুলি সূচকে প্রয়োগ করা হয় - তারা প্রতিশ্রুতিবদ্ধ নয়। সুতরাং আপনি যদি git stash popদুবার, আপনি এই দুটি পরিবর্তন সেট মধ্যে পার্থক্য হারাবেন।
মুরিনিক

অক্টোবর 2017 এর শেষ অবধি, গিট মেলিং তালিকায় ব্যাপক আলোচনা হয়েছে, যেখানে গিট স্ট্যাশ সেভ কমান্ডটি বিদ্যমান বিকল্পের পক্ষে অবহেলা করা হচ্ছে git stash push। এর মূল কারণটি হ'লgit stash push নির্বাচিত প্যাথস্পেকগুলি স্ট্যাশ করার বিকল্পটি প্রবর্তন করে , git stash saveকোনও কিছু সমর্থন করে না।
কৃষ্ণ গুপ্ত

39

আমি উত্তর তিনটি অনুচ্ছেদে ভঙ্গ করব।

অংশ 1:

git stash(একটি "স্ট্যাশ" এ আপনার অ-প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি সংরক্ষণ করতে Note দ্রষ্টব্য: এটি কার্যকারী ট্রি থেকে পরিবর্তনগুলি সরিয়ে দেয়!)

git checkout some_branch(উদ্দিষ্ট শাখায় পরিবর্তন - এই ক্ষেত্রে some_branch)

git stash list (তালিকা স্ট্যাশে)

আপনি দেখতে পাচ্ছেন:
স্ট্যাশ @ {0}: {শাখার নাম} উপর ডব্লিউআইপি: commit শেষ কমিটের এসএএএ -1} আপনার শাখার শেষ কমিট}
স্ট্যাশ @ {0}: মাস্টারে ডাব্লুআইপি: 085b095c6 পরীক্ষার জন্য পরিবর্তন

git stash apply (বর্তমান শাখায় কর্মক্ষম গাছের উপর স্ট্যাশ প্রয়োগ করতে)

git stash apply stash@{12}(আপনার যদি অনেক স্ট্যাশ থাকে তবে স্ট্যাশ কী প্রযোজ্য তা চয়ন করতে পারেন - এই ক্ষেত্রে আমরা স্ট্যাশ প্রয়োগ করি 12)

git stash drop stash@{0}(স্ট্যাশ তালিকা থেকে অপসারণ - এই ক্ষেত্রে স্ট্যাশ 0)

git stash pop stash@{1} (নির্বাচিত স্ট্যাশ প্রয়োগ করতে এবং এটি স্ট্যাশ তালিকা থেকে বাদ দিতে)

পার্ট 2:
আপনি এই আদেশটি দিয়ে আপনার পরিবর্তনগুলি আড়াল করতে পারেন তবে এটি প্রয়োজনীয় নয়।
আপনি স্ট্যাশ ছাড়াই পরের দিন চালিয়ে যেতে পারেন।
আপনার পরিবর্তনগুলি আড়াল করার জন্য এবং বিভিন্ন শাখায় কাজ করার জন্য বা আপনার কোডটির কিছু বাস্তবায়ন এবং শাখা ছাড়াই স্ট্যাশে সংরক্ষণ এবং আপনার কাস্টম কেসটি কমিটর করার জন্য এই আদেশগুলি!
এবং পরে আপনি কয়েকটি স্ট্যাশ ব্যবহার করতে পারেন এবং যাচাই করা ভাল।

পার্ট 3:
স্থানীয় পরিবর্তনের জন্য স্ট্যাশ কমান্ড আপনার পরিবর্তনগুলি লুকান।
আপনি যদি দূর থেকে কাজ করতে চান তবে আপনাকে অবশ্যই প্রতিশ্রুতিবদ্ধ এবং চাপ দিন।


10

মূল ধারণাটি হ'ল

দূরে একটি নোংরা ওয়ার্কিং ডিরেক্টরিতে পরিবর্তনগুলি স্ট্যাশ করুন

সুতরাং বেসিকলি স্ট্যাশ কমান্ড আপনার কিছু পরিবর্তনগুলি রাখুন যা আপনার প্রয়োজন হয় না বা এই মুহুর্তে চান না; তবে আপনার এগুলি দরকার হতে পারে।

আপনি যখন ওয়ার্কিং ডিরেক্টরি এবং সূচকের বর্তমান অবস্থা রেকর্ড করতে চান তবে গিট স্ট্যাশ ব্যবহার করুন তবে একটি পরিষ্কার ওয়ার্কিং ডিরেক্টরিতে ফিরে যেতে চান। কমান্ড আপনার স্থানীয় পরিবর্তন দূরে সংরক্ষণ করে এবং মেলে কাজ ডিরেক্টরি ফেরত মস্তক কমিট।


7

আপনি নিম্নলিখিত আদেশগুলি ব্যবহার করতে পারেন:

  • আপনার অনমুক্ত পরিবর্তনগুলি সংরক্ষণ করতে

    git stash

  • আপনার সংরক্ষিত স্ট্যাশগুলি তালিকাভুক্ত করতে

    git stash list

  • এক্স যেখানে 0,1,2 থাকে এমন আপত্তিহীন পরিবর্তনগুলি প্রয়োগ / ফিরিয়ে আনতে ...

    git stash apply stash@{x}

বিঃদ্রঃ:

  • কোনও স্ট্যাশ প্রয়োগ করতে এবং এটি স্ট্যাশ তালিকা থেকে অপসারণ করতে

    git stash pop stash@{x}

  • কোনও স্ট্যাশ প্রয়োগ এবং স্ট্যাশ তালিকায় রাখার জন্য

    git stash apply stash@{x}


4

আপনি যদি git stashকাজের কপিতে (স্টেজিং এরিয়াতে নয়) পরিবর্তিত হয়ে পড়ে থাকেন তবে গিট একটি স্ট্যাশড বস্তু তৈরি করবে এবং স্ট্যাশের স্ট্যাকের দিকে ঠেলা দেবে (ঠিক যেমন আপনি করেছিলেন git checkout -- .তবে আপনি পরিবর্তনগুলি হারাবেন না)। পরে, আপনি স্ট্যাকের শীর্ষ থেকে পপ করতে পারেন।


2

স্ট্যাশ কমান্ড আপনার শেষ প্রতিশ্রুতি থেকে আপনি যে কোনও পরিবর্তন আটকানো হবে ash আপনার ক্ষেত্রে যদি আপনি পরের দিন কাজ চালিয়ে যাচ্ছেন তবে স্ট্যাশ করার কোনও কারণ নেই। আপনি পরিবর্তন করতে চান না এমন পরিবর্তনগুলি পূর্বাবস্থায় ফেলার জন্য আমি কেবল স্ট্যাশ ব্যবহার করব।


2
না, git stashআপনার শাখা পরিবর্তন করবে না। এটি বিশেষত কোনও প্রতিশ্রুতিবদ্ধ পরিবর্তনকে "প্রত্যাবর্তন" করবে না। এটি কেবলমাত্র (অস্থায়ী) আপনার ফাইলগুলিতে কোনও আপত্তিজনক পরিবর্তন বাতিল করবে। - এটি পিক মনে হতে পারে তবে গিটারের প্রসঙ্গে এই ধরণের শব্দগুলির একটি বিশেষ অর্থ রয়েছে have আপনার সত্যিই এগুলি মিশ্রিত করা উচিত নয়।
মিচাস

যে ইশারা জন্য ধন্যবাদ। আমি সেই অনুযায়ী আমার উত্তর পরিবর্তন করেছি।
সেভেরিন

গিটে একটি "শাখা" কমিটের একটি সিরিজ হিসাবে সংজ্ঞায়িত করা হয়। git stashকোনও প্রতিশ্রুতি স্পর্শ করবে না এবং তাই কোনও শাখা একেবারেই পরিবর্তন করবে না। এটি কোনও শাখা থেকে কোনও কিছু "মুছে ফেলবে" এটি কোনওভাবেই এটি "রিসেট" করবে না। শাখাটি একই থাকে, কেবলমাত্র কাজের গাছের ফাইলগুলি পরিবর্তিত হয়। - এগুলি দুটি সম্পূর্ণ ভিন্ন জিনিস।
মিচাস

এটি আপনার পরিবর্তনগুলি "স্ট্যাশ" বাদ দিবে না! গিট স্ট্যাশগুলির জন্য একটি লাইফো কাঠামো বজায় রাখে, সুতরাং স্ট্যাশ আসলে একটি ধাক্কা এবং আপনি এটির শীর্ষ থেকে পপ করতে পারেন। "বাতিল" শব্দের অর্থ আপনি কিছু হারাবেন, তবে আপনি তা করবেন না।
গির্জ্যাব্রাহাম

2

আমি জানি স্ট্যাক ওভারফ্লো মতামত ভিত্তিক উত্তরের জায়গা নয়, তবে কখন স্ট্যাশ দিয়ে পরিবর্তনগুলি আটকানো যায় সে সম্পর্কে আমার আসলে একটি ভাল মতামত রয়েছে।

আপনি পরীক্ষামূলক পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করতে চান না

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

হার্ড রিসেটের মাধ্যমে আপনি স্থানীয় পরিবর্তনগুলি হারাতে চান না

সেক্ষেত্রে আপনি একটি হার্ড রিসেট করতে পারেন। তবে আপনি যদি হার্ড রিসেট করেন তবে আপনি আপনার স্থানীয় কার্যনির্বাহী গাছের সমস্ত পরিবর্তন হারাবেন কারণ সর্বশেষ প্রতিশ্রুতির সময় যেখানে ছিল সেখানে সবকিছু ওভাররাইট হয়ে যায় এবং আপনি আপনার সমস্ত পরিবর্তন হারাবেন।

সুতরাং, 'কখন আপনার স্ট্যাশ করা উচিত' এর উত্তরের জন্য উত্তরটি যখন আপনাকে সিঙ্ক্রোনাইজড ওয়ার্কিং ট্রি / ইনডেক্স / কমিট দিয়ে একটি পরিষ্কার কমিট পয়েন্টে ফিরে যেতে হয় তবে আপনি স্থানীয় পরিবর্তনগুলি হারাতে চান না প্রক্রিয়া. আপনার পরিবর্তনগুলি কেবল স্ট্যাশে রাখুন এবং আপনি ভাল।

এবং একবার আপনি আপনার স্ট্যাশ সম্পন্ন করে নিলেন এবং তারপরে মার্জ বা টানা বা ধাক্কা দিলে আপনি কেবল পপ স্ট্যাশ বা প্রয়োগ করতে পারেন এবং আপনি যেখান থেকে শুরু করেছিলেন সেখানে ফিরে আসতে পারেন।

গিট স্ট্যাশ এবং গিটহাব

গিটহাব ক্রমাগত নতুন বৈশিষ্ট্য যুক্ত করছে, তবে এখনই সেখানে স্ট্যাশ সংরক্ষণের উপায় রয়েছে। আবার, কোনও স্ট্যাশ ধারণাটি এটি স্থানীয় এবং ব্যক্তিগত। আপনার ওয়ার্কস্টেশনে শারীরিক অ্যাক্সেস ব্যতীত আর কেউ আপনার স্ট্যাশে উঁকি দিতে পারে না। গিন্ড লগের সাথে গিন্ডের রিফ্লোগটি একইভাবে কিন্ডা ব্যক্তিগত public যদি এটি গিটহাবের দিকে ঠেলাঠেলি করা হয় তবে এটি ব্যক্তিগত হবে না।

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

git diff > git-dif-file.diff

স্ট্যাশ পপ

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