গিট স্ট্যাশ অনাবৃত: কীভাবে সমস্ত স্টেস্টেড পরিবর্তন বাদ দেওয়া যায়?


100

ধরুন গিট দ্বারা সংস্করণিত একটি প্রকল্পে দুটি সেট পরিবর্তন করা হয়েছে। একটি সেট মঞ্চস্থ হয় এবং অন্যটি নয়।

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

এটি git stashকমান্ডের মতো খুব শোনাচ্ছে । তবে git stashআমার প্রকল্প থেকে অচিরাচরিত ও মঞ্চস্থ পরিবর্তনগুলি উভয়ই দূরে রাখবে। এবং আমি এর মতো কিছু পাই না git stash uncached


4
আমার গিট ২.২১ নিয়ে আজও এটির উত্তম উত্তর নেই। নীচের সমস্ত উত্তর হয় ভুল ( -kবিকল্প) বা ব্যবহার করা জটিল umbers
পেঙ্গে গেঞ্জ

উত্তর:


100

আপডেট 2:
আমি নিশ্চিত নই কেন লোকেরা এই উত্তর সম্পর্কে অভিযোগ করছে, মনে হচ্ছে এটি আমার সাথে নিখুঁতভাবে কাজ করছে, অবরুদ্ধ ফাইলগুলির জন্য আপনি -uপতাকাটি যুক্ত করতে পারেন

পুরো কমান্ড হয়ে যায় git stash --keep-index -u

এবং git-stashসহায়তা থেকে একটি স্নিপেট এখানে

--কিপ-ইনডেক্স বিকল্পটি ব্যবহার করা হলে সূচিতে ইতিমধ্যে যুক্ত সমস্ত পরিবর্তন অক্ষত থাকবে।

যদি --inc شمول-Unracked বিকল্পটি ব্যবহার করা হয়, সমস্ত চিহ্নবিহীন ফাইলগুলিও স্ট্যাশ করা হয় এবং তারপরে গিট ক্লিন দিয়ে পরিষ্কার করা হয়, কার্য ডিরেক্টরিকে খুব পরিষ্কার অবস্থায় রেখে দেয়। পরিবর্তে --all বিকল্পটি যদি ব্যবহার করা হয় তবে অগ্রাহ্য করা ফাইলগুলি চিহ্নবিহীন ফাইলগুলি ছাড়াও স্ট্যাশ করে পরিষ্কার করা হয়।

এটি দেখতে এটির একটি জিআইএফ:

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

হালনাগাদ:

যদিও এটি নির্বাচিত উত্তর, অনেকগুলি উল্লেখ করেছে যে [নীচের উত্তর] (https://stackoverflow.com/a/34681302/292408) সঠিক উত্তর, আমি এটি পরীক্ষা করে দেখার পরামর্শ দিই।

আমি আজ (31/1/2020) গিট সংস্করণের বিপরীতে আমার উত্তরটি পরীক্ষা করেছি 2.24.0এবং আমি এখনও বিশ্বাস করি যে এটি সঠিক, আমি চিহ্ন ছাড়াই থাকা ফাইলগুলি সম্পর্কে উপরে একটি ছোট নোট যুক্ত করেছি। আপনি যদি মনে করেন এটি কাজ করছে না দয়া করে আপনার গিট সংস্করণটিও উল্লেখ করুন।

প্রাচীন উত্তর :
যদি --keep-indexবিকল্প ব্যবহার করা হয়, ইতিমধ্যে সূচক যোগ করা সমস্ত পরিবর্তন অক্ষত করা হয়:

git stash --keep-index

এর ডকুমেন্টেশন থেকেgit-stash :

আংশিক কমিটি পরীক্ষা করা হচ্ছে

আপনি git stash save --keep-indexযখন কাজের গাছের পরিবর্তনগুলি থেকে দুটি বা আরও কমিট করতে চান তখন আপনি ব্যবহার করতে পারেন এবং প্রতিশ্রুতি দেওয়ার আগে আপনি প্রতিটি পরিবর্তন পরীক্ষা করতে চান:

# ... hack hack hack ...
$ git add --patch foo            # add just first part to the index
$ git stash save --keep-index    # save all other changes to the stash
$ edit/build/test first part
$ git commit -m 'First part'     # commit fully tested change
$ git stash pop                  # prepare to work on all other changes
# ... repeat above five steps until one commit remains ...
$ edit/build/test remaining parts
$ git commit foo -m 'Remaining parts'

তবে, আপনি যদি কেবলমাত্র পর্যায়ক্রমে পরিবর্তনগুলি পরীক্ষা করতে চান তবে আপনি চেষ্টা করতে পারেন difftool:

git difftool --cached

4
git stash [-p|--patch]ইন্টারেক্টিভ স্ট্যাশিংয়ের মতো মনে হয় যা দেখুন । থেকে man git stash"--patch সঙ্গে, আপনি ইন্টারেক্টিভ মাথা এবং কাজ গাছ stashed করা মধ্যে পরিবর্তন থেকে কৃপণ ব্যক্তি নির্বাচন করতে পারেন।"
এখানে

4
আমি সাধারণত add -p, checkout -pএবং reset -p, চেষ্টা করি না stash -p,
টিপটির

21
মনে রাখবেন যে এই উত্তরটি আপনি মঞ্চস্থ পরিবর্তনগুলিও সংযুক্ত করবে।
বেন ফ্লিন 16

4
এই উত্তরটি সত্যই কার্যকর নয় কারণ এর ফলে বিভ্রান্তির সৃষ্টি হবে। এই উত্তরটি আরও ভাল স্ট্যাকওভারফ্লো . com/a/34681302/292408
এলিজা লিন

4
@ এলিজাহলিন আমি অন্য উত্তরের সাথে সংযুক্ত করেছি যেহেতু আমি অনেক লোককে বলেছি এটিই উত্তরের উত্তর, আপনার মন্তব্যের জন্য ধন্যবাদ
মোহাম্মদ আবুশাদি 29:48

108

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

ধারণাটি হ'ল আপনার মঞ্চস্থ পরিবর্তনগুলির জন্য একটি অস্থায়ী প্রতিশ্রুতিবদ্ধ করুন, তারপরে অযাচিত পরিবর্তনগুলি স্ট্যাশ করুন, তারপরে অস্থায়ী প্রতিশ্রুতি আন-কমিট করুন:

# temp commit of your staged changes:
$ git commit --message "WIP"

# -u option so you also stash untracked files
$ git stash -u

# now un-commit your WIP commit:
$ git reset --soft HEAD^

এই মুহুর্তে, আপনার অকাট্য পরিবর্তনের একটি সংক্ষিপ্ত বিবরণ থাকবে এবং কেবলমাত্র আপনার কার্যকরী অনুলিপিতে আপনার মঞ্চ পরিবর্তন হবে।


22
এটি সত্যই সঠিক উত্তর আইএমও। --keep-indexবর্তমান গৃহীত উত্তরে বিকল্প এখনো stashes কি সূচক, এটি শুধু এছাড়াও সূচক এটি রাখে। সুতরাং এটি অনুলিপি করা হয়, এবং ilaর্ষনীয়তা ফলস্বরূপ।
কেন উইলিয়ামস

4
@ কেনউইলিয়ামস << ডেল> উল্লাস </ del> <ins> ট্র্যাজেডি </ ইন>
মঙ্গলবার

@ কেন উইলিয়ামস যা সত্যিই আমাকে বিরক্ত করেছিল। ওপি আপনি নির্বাচিত উত্তর সামঞ্জস্য করতে পারেন?
মাইকমুরকো

4
git add .ধাপে উন্নত করা করতে চাইবেন git add --allযেমন যে খুব সাম্প্রতিক কাজ করা উপরে একটি ডিরেক্টরির মধ্যে ফাইল দখল করা উচিত নয়।
এলিজা লিন

4
এটি এখন পর্যন্ত সেরা উত্তর, হিসাবে গৃহীত উত্তরের - রক্ষাকারী-সূচক বিকল্পটি বিভ্রান্তিকর। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
এলিজা লিন

22

আমি খুঁজে পেয়েছি যে চিহ্নিত উত্তরটি আমার পক্ষে কার্যকর হয়নি কারণ যেহেতু আমার এমন কিছু প্রয়োজন ছিল যা কেবলমাত্র আমার অস্থির পরিবর্তনগুলি স্থির করে দেয়। চিহ্নিত উত্তর, git stash --keep-indexস্টেজড এবং অস্টেজ উভয় পরিবর্তনকে স্ট্যাশ করে। --keep-indexঅংশ নিছক সূচক কাজ কপি উপর অক্ষত পাশাপাশি ছেড়ে। এটি ওপির পক্ষে কাজ করে তবে কেবলমাত্র তিনি উত্তরটির চেয়ে কিছুটা আলাদা প্রশ্ন জিজ্ঞাসা করেছিলেন বলে।

স্টেস্ট ব্যবহার না করা হ'ল স্টেস্ট ব্যবহার না করা একমাত্র সত্যিকারের উপায় un

git diff > unstaged.diff
git apply -R unstaged.diff

git checkout -- .পরিবর্তে কাজ করবে apply -R

কাজ কাজ আর কাজ...

git apply unstaged.diff
rm unstaged.diff

4
এখানে git version 2.6.1.windows.1, git stash -kবর্ণিত হিসাবে কাজ করেছেন।
কোপ্পোর

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত! একাধিক স্ট্যাকওভারফ্লো থ্রেডগুলিতে এটিই একমাত্র এটি দাবি করে যা টেম্পটি কমিট করার উপর নির্ভর করে না!
ব্যবহারকারী 643011

4
@ ব্যবহারকারী 643011: টেম্প কমিটগুলি গিটে খারাপ জিনিস নয়। এগুলির কোনও মূল্য নেই এবং কারও ক্ষতি করতে হবে না।
ফ্রিটজ

4
@ ফ্রিটজ: কিছু পরিস্থিতিতে কোনও সাময়িক কমিট সম্ভব নয়। আপনার যদি প্রি-কমিট হুক থাকে যা বর্তমানের কার্যকরী কোডটি পরীক্ষা করে তা ব্যর্থ হতে পারে। আপনার মঞ্চ পরিবর্তন যদি ভাল হয় তবে আপনার স্টেস্টেড পরিবর্তনগুলি না হলে এই পদ্ধতির পর্যায়ক্রমে পরিবর্তনগুলি করতে ব্যর্থ হবে।
পেঙ্গে গেঞ্জ

4
এটিতে তালিকৃত ফাইল অন্তর্ভুক্ত নেই।
ডিফ প্যাচগুলিতে

5

গিট: স্ট্যাশ আনস্টেজড পরিবর্তনসমূহ

এটি এমন সমস্ত পরিবর্তনকে সংযুক্ত করবে যেগুলি আপনি গিটে যোগ করেন নি:

git stash -k

মনে রাখবেন যে সদ্য তৈরি হওয়া (এবং অ-যুক্ত) ফাইলগুলি আপনি যদি -uস্যুইচটি না ব্যবহার করেন তবে আপনার কার্যক্ষম ডিরেক্টরিতে থাকবে ।

git stash -k -u 

এছাড়াও, আপনি যখন স্ট্যাশ পপ পরে গিট করবেন তখন আপনার কার্যকরী ডিরেক্টরি অবশ্যই পরিষ্কার (অর্থাত্ সমস্ত পরিবর্তন যুক্ত করা দরকার)।

http://makandracards.com/makandra/853-git-stash-unstaged-changes


13
এটি সমান git stash --keep-index। স্টেজযুক্ত ফাইলগুলি স্ট্যাশের অন্তর্ভুক্ত।
বেনিয়ামিন চাহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.