কিছুটা অতিরিক্ত ব্যাখ্যা হিসাবে, নোট যেটি git stash
দুটি করে তোলে, বা তিনটি কমিট করে। ডিফল্ট দুটি; আপনি তিনটি পাবেন যদি আপনি কোনও বিকল্প --all
বা --include-untracked
বিকল্পগুলির বানান ব্যবহার করেন ।
এই দুটি বা তিনটি কমিটগুলি একটি গুরুত্বপূর্ণ উপায়ে বিশেষ: এগুলি কোনও শাখায় নেই। গিট তাদের বিশেষ নামের মাধ্যমে চিহ্নিত করে stash
। 1 সবচেয়ে গুরুত্বপূর্ণ বিষয়, যদিও, কি গীত আপনি-এবং দেয় তোলে এই দুই বা তিন করে সঙ্গে আপনি-না। এটি বুঝতে আমাদের এই কমিটিগুলির মধ্যে কী আছে তা খতিয়ে দেখতে হবে।
স্ট্যাশ এর ভিতরে কি আছে
প্রতিটি প্রতিশ্রুতিবদ্ধ এক বা একাধিক পিতামাতার কমিটের তালিকা করতে পারে । এগুলি একটি গ্রাফ তৈরি করে, যেখানে পরবর্তীতে পূর্বেরগুলিতে ফিরে আসে। স্ট্যাশ সাধারণত দুটি কমিট করে, যা আমি i
সূচক / স্টেজিং-এরিয়া বিষয়বস্তু এবং w
ওয়ার্ক-ট্রি সামগ্রীর জন্য কল করতে পছন্দ করি । প্রতিটি কমিট একটি স্ন্যাপশট ধারণ করে তাও মনে রাখবেন। একটি সাধারণ প্রতিশ্রুতিতে, এই স্ন্যাপশটটি সূচি / স্টেজিং-এরিয়া বিষয়বস্তু থেকে তৈরি করা হয়। সুতরাং i
প্রতিশ্রুতিবদ্ধতা একটি নিখুঁত স্বাভাবিক অঙ্গীকার! এটি কেবল কোনও শাখায় নয়:
...--o--o--o <-- branch (HEAD)
|
i
আপনি যদি কোনও সাধারণ স্ট্যাশ তৈরি করেন তবে git stash
কোডটি w
এখন আপনার সমস্ত ট্র্যাকড ওয়ার্ক-ট্রি ফাইলগুলি (একটি অস্থায়ী সহায়ক সূচীতে) অনুলিপি করে। Git সেট করে এই প্রথম পিতা বা মাতা w
বিন্দু সমর্পণ করতে HEAD
কমিট, এবং বিন্দু দ্বিতীয় পিতা বা মাতা সমর্পণ করতে i
। সর্বশেষে, এটি stash
এই w
প্রতিশ্রুতিতে নির্দেশ করে :
...--o--o--o <-- branch (HEAD)
|\
i-w <-- stash
আপনি যদি যোগ করেন --include-untracked
বা --all
, গিট u
তৈরি করার সময় i
এবং এর মধ্যে একটি অতিরিক্ত কমিট করে w
। এর জন্য স্ন্যাপশট বিষয়বস্তু u
হ'ল সেই ফাইলগুলি যা তালাবিহীন কিন্তু উপেক্ষা করা হয় না ( --include-untracked
), বা এমন ফাইলগুলি যা এড়ানো যায় না এমনকি যদি তা উপেক্ষা করা হয় ( --all
)। এই অতিরিক্ত u
কমিট হয়েছে কোন পিতা বা মাতা, এবং তারপর যখন git stash
তোলে w
, এটা সেট করে w
এর তৃতীয় পিতা বা মাতা এই u
কমিট, যাতে আপনি পাবেন:
...--o--o--o <-- branch (HEAD)
|\
i-w <-- stash
/
u
গিট এছাড়াও এই মুহুর্তে, প্রতিশ্রুতিতে ক্ষতিকারক যে কোনও ওয়ার্ক-ট্রি ফাইলগুলি সরিয়ে দেয়u
(এটি ব্যবহার git clean
করে)।
স্ট্যাশ পুনরুদ্ধার করা হচ্ছে
আপনি যখন কোনও স্ট্যাশ পুনরুদ্ধার করতে যান , আপনার কাছে এটি ব্যবহার করার --index
বা না ব্যবহার করার বিকল্প রয়েছে । এটি git stash apply
(বা অভ্যন্তরীণভাবে ব্যবহৃত কোনও কমান্ডের মধ্যে apply
যেমন কোনও pop
) বলছে যে এটি আপনার বর্তমান সূচকটি সংশোধন করার চেষ্টা করার প্রতিশ্রুতি ব্যবহার করবে i
। এই পরিবর্তনটি এর সাথে সম্পন্ন করা হয়:
git diff <hash-of-i> <hash-of-i's-parent> | git apply --index
(কম-বেশি; এখানে মৌলিক ধারণাটি পেয়ে যায় এমন একগুচ্ছ বিশদ বিবরণ রয়েছে)।
আপনি বাদ তাহলে --index
, git stash apply
সম্পূর্ণরূপে উপেক্ষা করে i
কমিট।
যদি স্ট্যাশের কেবল দুটি কমিট থাকে git stash apply
তবে এখন w
কমিট প্রয়োগ করতে পারেন। এটা তোলে কল করে এই আছে git merge
2 (এটা কমিট বা স্বাভাবিক একত্রীকরণ হিসাবে ফলাফলের আচরণ করতে সক্ষম হবেন ছাড়া), মূল কমিট যার উপর লুকোবার জায়গা সেটা ব্যবহার ( i
'র পিতা বা মাতা, এবং w
এর প্রথম পিতা বা মাতা) একত্রীকরণ বেস হিসাবে, w
যেমন --theirs
প্রতিশ্রুতিবদ্ধ এবং আপনার বর্তমান (HEAD) সংযুক্তির লক্ষ্য হিসাবে প্রতিশ্রুতিবদ্ধ। যদি মার্জটি সফল হয় তবে সবকিছু ভাল — ভাল, কমপক্ষে গিটও তাই মনে করে — এবং git stash apply
নিজেই সফল হয়। আপনি ব্যবহার করে থাকেন git stash pop
লুকোবার জায়গা প্রয়োগ করতে, কোড এখন ড্রপ লুকোবার জায়গা। 3 যদি মার্জটি ব্যর্থ হয়, গিট অ্যাপ্লিকেশনটিকে ব্যর্থ হয়েছে বলে ঘোষণা করে। আপনি যদি ব্যবহারgit stash pop
, কোডটি স্ট্যাশ ধরে রাখে এবং একই ব্যর্থতার স্থিতি প্রদান করে git stash apply
।
তবে আপনার যদি সেই তৃতীয় প্রতিশ্রুতি থাকে — যদি u
আপনি যে স্ট্যাশ ব্যবহার করছেন তার মধ্যে যদি কোন কমিট থাকে — তবে বিষয়গুলি পরিবর্তন হয়! কমিটের u
অস্তিত্ব নেই এমন ভান করার কোনও বিকল্প নেই। 4 গিট সেই প্রতিশ্রুতি থেকে সমস্ত ফাইলকে u
বর্তমান কার্য-বৃক্ষে সরানোর জন্য জোর দিয়েছিল । এর অর্থ এই যে ফাইলগুলি অবশ্যই অস্তিত্বহীন নয় বা প্রতিশ্রুতি অনুসারে একই বিষয়বস্তু থাকা উচিত u
।
এটি হওয়ার জন্য, আপনি git clean
নিজেই ব্যবহার করতে পারেন — তবে মনে রাখবেন যে গিট সংগ্রহস্থলের অভ্যন্তরে অচিহ্নযুক্ত ফাইলগুলির (উপেক্ষা করা বা না) কোনও অস্তিত্ব নেই, তাই নিশ্চিত হয়ে নিন যে এই ফাইলগুলি সমস্ত ধ্বংস হতে পারে! অথবা, আপনি অস্থায়ী ডাইরেক্টরি করতে, এবং সেখানে জিম্মা-বা এমনকি অন্য কি জন্য ফাইল স্থানান্তর করতে পারেন git stash save -u
বা git stash save -a
থেকে ঐ চালানো হবে git clean
আপনার জন্য। তবে এটি আপনাকে u
পরবর্তী সময়ে মোকাবেলার জন্য অন্য স্টাইলের স্ট্যাশ সহ ছেড়ে দেয় ।
1 এটি আসলে refs/stash
। আপনি যদি নামে একটি শাখা তৈরি করেন তবে এটি গুরুত্বপূর্ণ stash
: শাখার পুরো নাম refs/heads/stash
, সুতরাং এগুলি বিরোধে নয়। তবে এটি করবেন না: গিট কিছু মনে করবে না, তবে আপনি নিজেকে বিভ্রান্ত করবেন। :-)
2git stash
কোড আসলে ব্যবহার git merge-recursive
সরাসরি এখানে। এটি একাধিক কারণে প্রয়োজনীয়, এবং আপনি যখন বিরোধগুলি সমাধান করেন এবং প্রতিশ্রুতিবদ্ধ হন তখন গিট এটি একীভূত হিসাবে বিবেচনা করে না তা নিশ্চিত করার পার্শ্ব প্রতিক্রিয়াও রয়েছে।
3 এ কারণেই আমি এড়িয়ে চলার git stash pop
পক্ষে পরামর্শ দিচ্ছি git stash apply
। কী প্রয়োগ হয়েছে তা পর্যালোচনা করার সুযোগ পান এবং এটি আসলে সঠিকভাবে প্রয়োগ হয়েছিল কিনা তা স্থির করুন । যদি তা না হয় তবে আপনার কাছে এখনও স্ট্যাশ রয়েছে যার অর্থ আপনি git stash branch
সবকিছুকে পুরোপুরি পুনরুদ্ধার করতে ব্যবহার করতে পারেন । ঠিক আছে, অনুমান করে যে এই সমস্যাযুক্ত u
প্রতিশ্রুতিবদ্ধতার অভাব ।
4 সত্যই আছে: git stash apply --skip-untracked
বা কিছু হতে হবে । একটি বৈকল্পিকও হওয়া উচিত যার অর্থ এই সমস্ত u
প্রতিশ্রুতিবদ্ধ ফাইলগুলি একটি নতুন ডিরেক্টরিতে ফেলে দেওয়া , যেমন git stash apply --untracked-into <dir>
, সম্ভবত।
git stash show -p | git apply --3