সহজ প্রশ্নের সহজ উত্তর হ'ল git stash apply
আপনি যে শাখায় নিজের পরিবর্তন চান তা কেবল পরীক্ষা করে দেখুন এবং তারপরে git stash apply। তারপরে git diffফলাফলটি দেখতে ব্যবহার করুন ।
আপনি সব আপনার পরিবর্তনগুলি-সঙ্গে সম্পন্ন করার পর applyকেমন লাগে ভাল এবং আপনি নিশ্চিত আপনি প্রয়োজন নেই লুকোবার জায়গা কোনো more- তারপর ব্যবহার git stash dropতা পরিত্রাণ পেতে।
আমি সবসময় git stash applyপরিবর্তে ব্যবহার করার পরামর্শ দিই git stash pop। পার্থক্য যে applyপাতার সহজ জন্য পুনরায় চেষ্টা জন্য প্রায় লুকোবার জায়গা apply, বা এ খুঁজছেন জন্য, ইত্যাদি যদি popলুকোবার জায়গা বের করে আনতে সক্ষম, হবে অবিলম্বে হয় এটা dropএটা, এবং যদি আপনি হঠাৎ বুঝতে পারি যে আপনি এটা কোথাও বের করে আনতে চেয়েছিলেন অন্যথায় (একটি ভিন্ন শাখায়), বা সাথে --index, বা এরকম কিছু, এটি এত সহজ নয়। আপনি যদি apply, আপনি কখন চয়ন করতে হবে drop।
এটি একরকম বা অন্য কোনও উপায়ে নাবালিকা, এবং কোনও নবজাতকের কাছে গিট দেওয়ার জন্য এটি একই রকম হওয়া উচিত। (এবং আপনি এই সমস্ত কিছু এড়িয়ে যেতে পারেন!)
আপনি যদি আরও উন্নত বা আরও জটিল স্টাফ করছেন?
এটি যেমন ছিল তেমন কমপক্ষে তিন বা চারটি আলাদা "গিট স্ট্যাশ ব্যবহারের উপায়" রয়েছে। উপরেরগুলি "উপায় 1", "সহজ উপায়" এর জন্য:
আপনি একটি পরিষ্কার শাখা দিয়ে শুরু করেছিলেন, কিছু পরিবর্তন নিয়ে কাজ করছেন এবং তখন বুঝতে পেরেছিলেন যে আপনি সেগুলি ভুল শাখায় করছেন। আপনি এখন আপনার যে পরিবর্তনগুলি করেছেন সেগুলি নিতে এবং সেগুলিকে অন্য একটি শাখায় "স্থানান্তরিত" করতে চান।
এটি উপরে বর্ণিত সহজ মামলা। চালান git stash save(বা সরল git stash, একই জিনিস)। অন্যান্য শাখা পরীক্ষা করে দেখুন git stash apply। গিটের পরিবর্তে শক্তিশালী মার্জ মেকানিজম ব্যবহার করে এটি আপনার পূর্ববর্তী পরিবর্তনগুলিতে একত্রীকরণের জন্য গিট পায়। আপনি ফলাফলগুলিgit diff পছন্দ করেন কিনা তা সতর্কতার সাথে (সহ ) পরিদর্শন করুন এবং যদি তা করেন git stash dropতবে স্ট্যাশ ফেলে দেওয়ার জন্য ব্যবহার করুন । তুমি করেছ!
আপনি কিছু পরিবর্তন শুরু করেছেন এবং সেগুলি স্ট্যাস করেছেন। তারপরে আপনি অন্য শাখায় স্যুইচ করেছেন এবং আরও পরিবর্তন শুরু করেছেন, ভুলে গিয়েছেন যে আপনার কাছে স্ট্যাশেডগুলি রয়েছে।
এখন আপনি এই পরিবর্তনগুলি রাখতে বা সরানোতে চান এবং আপনার স্ট্যাশও প্রয়োগ করতে পারেন।
আপনি বাস্তবে git stash saveআবার git stashপরিবর্তনগুলি "স্ট্যাক" হিসাবে তৈরি করতে পারেন । যদি আপনি এটি করেন যে আপনার দুটি স্ট্যাশ রয়েছে, কেবলমাত্র তাকে বলা হয় তবে stashআপনি লিখতে পারেন stash@{0}- এবং একটি বানানও লিখে রাখতে পারেন stash@{1}। git stash listতাদের সমস্ত দেখতে (যে কোনও সময়) ব্যবহার করুন। সর্বশেষতম সর্বদা সর্বনিম্ন সংখ্যাযুক্ত। আপনি যখন git stash drop, এটি stash@{1}সর্বাধিক ড্রপ, এবং এক যা স্ট্যাকের শীর্ষে চলে গেছে। আপনার যদি আরও বেশি কিছু থাকে তবে যা ছিল তা stash@{2}হয়ে ওঠে stash@{1}।
আপনি applyএবং তারপরে dropএকটি নির্দিষ্ট স্ট্যাশও করতে পারেন : git stash apply stash@{2}এবং আরও অনেক কিছু। একটি নির্দিষ্ট স্ট্যাশ ফেলে দেওয়া, কেবলমাত্র উচ্চতর সংখ্যায়িতদের তালিকাভুক্ত করে। আবার, সংখ্যা ছাড়া একটিটিওstash@{0} ।
আপনি যদি প্রচুর স্ট্যাশস জমা করেন তবে এটি মোটামুটি অগোছালো হয়ে যেতে পারে (আমি যে স্ট্যাশ চাইছিলাম stash@{7}তা ছিল নাকি এটি stash@{4}? অপেক্ষা কর, আমি কেবল অন্যকে ঠেলেছি, এখন সেগুলি 8 এবং 5?)। আমি ব্যক্তিগতভাবে এই পরিবর্তনগুলি একটি নতুন শাখায় স্থানান্তর করতে পছন্দ করি, কারণ শাখাগুলির নাম রয়েছে এবং cleanup-attempt-in-Decemberএটি আমার কাছে অনেক বেশি অর্থ stash@{12}। ( git stashকমান্ডটি একটি saveচ্ছিক সংরক্ষণের বার্তাটি গ্রহণ করে এবং সেগুলি সহায়তা করতে পারে তবে কোনওভাবে আমার সমস্ত স্ট্যাশগুলি কেবল নামকরণ করে WIP on branch।
(অতিরিক্ত উন্নত) আপনি চালানোর আগে বা আপনার কোডের নির্দিষ্ট বিটগুলি git stash save -pসাবধানতার সাথে ব্যবহার করেছেন বা ব্যবহার করেছেন । আপনার কাছে স্ট্যাশড ইনডেক্স / স্টেজিং এরিয়াতে একটি সংস্করণ এবং কার্যকারী ট্রিতে অন্য একটি (ভিন্ন) সংস্করণ ছিল। আপনি এই সব সংরক্ষণ করতে চান। সুতরাং এখন আপনি ব্যবহার করুন , এবং এটি কখনও কখনও ব্যর্থ হয়:git addgit rmgit stash savegit stash apply --index
Conflicts in index. Try without --index.
git stash save --keep-index"কী প্রতিশ্রুতিবদ্ধ হবে" তা পরীক্ষা করার জন্য আপনি ব্যবহার করছেন । এটি একটি এই উত্তরের সুযোগের বাইরে; দেখতে এই অন্য Stackoverflow উত্তর পরিবর্তে।
জটিল ক্ষেত্রে, আমি আপনার এখন যে কোনও পরিবর্তন (যদি আপনার পছন্দ হয় তবে একটি নতুন শাখায়) কমিট করে প্রথমে একটি "ক্লিন" ওয়ার্কিং ডিরেক্টরি থেকে শুরু করার পরামর্শ দিই recommend আপনি যে "কোথাও" এগুলি প্রয়োগ করছেন সেটির আর কিছুই নেই এবং আপনি কেবল পরিবর্তিত পরিবর্তনগুলি চেষ্টা করে যাবেন:
git status # see if there's anything you need to commit
# uh oh, there is - let's put it on a new temp branch
git checkout -b temp # create new temp branch to save stuff
git add ... # add (and/or remove) stuff as needed
git commit # save first set of changes
এখন আপনি একটি "ক্লিন" শুরুর পয়েন্টে আছেন। অথবা এটি আরও এরকম হতে পারে:
git status # see if there's anything you need to commit
# status says "nothing to commit"
git checkout -b temp # optional: create new branch for "apply"
git stash apply # apply stashed changes; see below about --index
মনে রাখা মূল জিনিস "লুকোবার জায়গা" অর্থাৎ হয় একটি কমিট, এটা ঠিক সামান্য "-এর মজার / অদ্ভুত" কমিট যে, "একটি শাখা এ" নয়। applyকি কি পরিবর্তন কমিট এ অপারেশন দেখায়, এবং চেষ্টা এটা পুনরাবৃত্তি যেখানেই থাকুন না কেন আপনি এখন আছেন। স্ট্যাশ এখনও সেখানে থাকবে ( applyএটিকে চারপাশে রাখে), যাতে আপনি এটি আরও দেখতে পারেন বা সিদ্ধান্ত নিতে পারেন applyএটির এটির ভুল জায়গা এবং অন্যভাবে বা যা কিছু চেষ্টা করুন।
যে কোনও সময় আপনার কাছে কোনও স্ট্যাশ রয়েছে, আপনি স্ট্যাশে git stash show -pযা আছে তার একটি সরল সংস্করণ দেখতে ব্যবহার করতে পারেন। (এই সরলীকৃত সংস্করণটি কেবল "চূড়ান্ত ওয়ার্ক ট্রি" পরিবর্তনগুলিতে দেখায়, পৃথকভাবে পুনরুদ্ধার করা সংরক্ষণিত সূচি পরিবর্তন হয় না--index )) কমান্ডটি git stash applyছাড়াই --index, কেবল এখন আপনার ওয়ার্ক ডিরেক্টরিতে একই পরিবর্তনগুলি করার চেষ্টা করে ।
আপনার ইতিমধ্যে কিছু পরিবর্তন থাকলেও এটি সত্য। applyকমান্ড একটি করার জন্য একটি লুকোবার জায়গা আবেদন করতে খুশি পরিবর্তিত (এটা প্রয়োগ করতে চেষ্টা বা অন্তত,) পরিশ্রমী ডিরেক্টরি। আপনি উদাহরণস্বরূপ এটি করতে পারেন:
git stash apply stash # apply top of stash stack
git stash apply stash@{1} # and mix in next stash stack entry too
নির্দিষ্ট ক্রম প্রয়োগের জন্য নির্দিষ্ট স্ট্যাশগুলি বেছে নিয়ে আপনি এখানে "প্রয়োগ" আদেশটি চয়ন করতে পারেন। তবে নোট করুন, তবে প্রতিবার আপনি মূলত "গিট মার্জ" করছেন এবং মার্জ ডকুমেন্টেশন যেমন সতর্ক করে:
অ-তুচ্ছ অস্বীকৃত পরিবর্তনগুলির সাথে গিট মার্জ চালানো নিরুত্সাহিত করা হয়: সম্ভব হওয়ার পরেও এটি আপনাকে এমন একটি পরিস্থিতিতে ফেলে যেতে পারে যে কোনও বিরোধের ক্ষেত্রে পিছিয়ে রাখা কঠিন।
আপনি যদি একটি পরিষ্কার ডিরেক্টরি দিয়ে শুরু করেন এবং সবেমাত্র বেশ কয়েকটি git applyঅপারেশন করছেন তবে ব্যাক আউট করা সহজ: git reset --hardপরিষ্কার অবস্থায় ফিরে আসার জন্য ব্যবহার করুন এবং আপনার applyক্রিয়াকলাপ পরিবর্তন করুন । (এই কারণেই আমি এই জটিল ক্ষেত্রে প্রথমে একটি ক্লিন ওয়ার্কিং ডিরেক্টরি শুরু করার পরামর্শ দিই))
খুব খারাপ সম্ভাব্য কেস সম্পর্কে কী বলা যায়?
ধরা যাক আপনি প্রচুর অ্যাডভান্সড গিট স্টাফ করছেন, এবং আপনি একটি স্ট্যাশ তৈরি করেছেন এবং করতে চান git stash apply --index, তবে এটির সাহায্যে সংরক্ষিত স্ট্যাশ প্রয়োগ করা আর সম্ভব নয়--index , কারণ শাখাটি সংরক্ষণের সময় থেকেই এটি খুব বেশি ডাইভার্ট হয়ে গেছে।
এই কি git stash branchজন্য হয়।
আপনি যদি:
- খুঁজে বার করো সঠিক কমিট আপনার উপর যখন আপনি মূল করেনি ছিল
stash, তারপর
- একটি নতুন শাখা তৈরি করুন এবং শেষ পর্যন্ত
git stash apply --index
পরিবর্তনগুলি পুনরায় তৈরি করার চেষ্টা অবশ্যই কাজ করবে । এটি কি করে। (এবং এটি তখন স্ট্যাশসটি সাফল্যের সাথে প্রয়োগ করা হয় dropsgit stash branch newbranch
সম্পর্কে কিছু চূড়ান্ত শব্দ --index(হ্যাক এটা কি?)
কীগুলি বোঝাতে --indexসহজ তবে অভ্যন্তরীণভাবে কিছুটা জটিল:
- আপনার যখন পরিবর্তন হয়, আপনাকে
git addতাদের আগে (বা "মঞ্চ") করতে হবেcommit আইএন ।
- সুতরাং, আপনি যখন দৌড়েছিলেন
git stash, আপনি হয়ত উভয় ফাইলই সম্পাদনা করেছেন fooএবং zorgএটির মধ্যে কেবল একটি মঞ্চস্থ করেছেন।
- সুতরাং যখন আপনি লুকোবার জায়গা ফিরে পেতে জিজ্ঞাসা, এটি চমৎকার হতে পারে যদি এটি
git addগুলি addইডি জিনিস এবং না না git add অ যোগ জিনিস। এটি হ'ল, যদি আপনি addসম্পাদনা করেন fooতবে zorgআপনি এটি করার আগে ফিরে না আসেন তবে stashঠিক একই সেটআপটি পাওয়া ভাল লাগবে। যা মঞ্চস্থ হয়েছিল, আবার মঞ্চস্থ করা উচিত; যা পরিবর্তিত হয়েছিল তবে মঞ্চস্থ হয়নি, তা আবার সংশোধন করা উচিত তবে মঞ্চস্থ করা উচিত নয়।
--indexপতাকা applyএই ভাবে সেট আপ জিনিষ করার চেষ্টা করে। যদি আপনার কাজের গাছ পরিষ্কার থাকে তবে এটি সাধারণত কার্যকর হয়। যদি আপনার ওয়ার্ক-ট্রিটিতে ইতিমধ্যে স্টাফ addএড থাকে তবে আপনি কীভাবে এখানে কিছু সমস্যা হতে পারে তা দেখতে পারেন। যদি আপনি ছেড়ে চলে যান --indexতবে applyঅপারেশনটি পুরো পর্যায়বদ্ধ / অচিহ্নবদ্ধ সেটআপ সংরক্ষণের চেষ্টা করে না। পরিবর্তে, এটি "স্ট্যাশ ব্যাগে" ওয়ার্ক-ট্রি কমিট ব্যবহার করে গিটের একীভূতকরণের যন্ত্রটি কেবল ডাকে । আপনি যদি পর্যায়ক্রমিক / অচিহ্নবদ্ধ সংরক্ষণের বিষয়ে চিন্তা না করে থাকেন তবে এর কাজটি করা --indexখুব সহজ করে git stash applyদেয়।