কীভাবে কেবলমাত্র নির্দিষ্ট ফাইল আনস্টাশ করবেন?


385

আমি আমার পরিবর্তনগুলি স্থির করে দিয়েছি। এখন আমি স্ট্যাশ থেকে কিছু ফাইল আনস্টাশ করতে চাই। কিভাবে আমি এটি করতে পারব?


4
আমার মনে হয় আপনাকে পুরো স্ট্যাশ প্রয়োগ করতে হবে তবে আপনি বেছে বেছে পুনরায় স্ট্যাশ করতে পারেন।
রিচার্ড

4
@ আবদৌতাহির স্ট্যাশ-এ কী দোষ হয়েছে?
অ্যালেক্স

32
@ আবদৌতাহিরী উহহহ .. গিট স্ট্যাশ একটি বৈধ বৈশিষ্ট্য এবং অত্যন্ত কার্যকর extremely আমি এটি প্রতিদিন ব্যবহার করি। বলুন, সহকর্মীর আমার কিছু পর্যালোচনা করা দরকার তবে আমি একটি জটিল পরিবর্তনের মধ্যবর্তী স্থানে আছি। আমি ভাঙ্গা কোডের একটি গাদা কমিট করতে যাচ্ছি না তাই আমি শাখাগুলি স্যুইচ করতে পারি। আমি স্ট্যাশ করতে চলেছি, শাখাগুলি স্যুইচ করব, পর্যালোচনা করব, ফিরে স্যুইচ করব, আনস্ট্যাশ করব। আপনার উপর সম্প্রসারিত পরোয়া না যারা বা কেন Git লুকোবার জায়গা কল্পনানুসারে "প্রস্তাবিত নয়" হয়? শুধু কারণ আপনার Git লুকোবার জায়গা ইতিহাস আপ ঘোলাটে এবং পড়তে কঠিন না মানে সবাই ফাঁদে গ্রহণ করেন। একটি অগোছালো গিট স্ট্যাশ সেট কেবল খারাপ কর্মপ্রবাহ, গিটের ত্রুটি নয়।
ডুয়াদওয়াদ

6
@ আলেক্স কিছুই না। গিট স্ট্যাশ দিয়ে কিছুই ভুল হয় না। এটি ব্যবহার চালিয়ে যান।
ডুদেওয়াদ

উত্তর:


460

যেমনটি নীচে উল্লিখিত হয়েছে এবং " আমি গিট স্ট্যাশ থেকে কীভাবে একটি একক ফাইল (বা কোনও ফাইলের পরিবর্তন) আনব ? " এ বিশদভাবে আপনি ব্যবহার প্রয়োগ করতে পারেন git checkoutবা git showএকটি নির্দিষ্ট ফাইল পুনরুদ্ধার করতে পারেন ।

git checkout stash@{0} -- <filename>

এটি ওভাররাইট করে filename : নিশ্চিত হয়ে নিন যে আপনার কাছে স্থানীয় পরিবর্তন নেই, অথবা আপনি পরিবর্তে স্ট্যাশ করা ফাইলটি মার্জ করতে চাইতে পারেন ।

( জাইম এম- এর মন্তব্য অনুসারে, টিসিএস-এর মতো নির্দিষ্ট শেলের জন্য যেখানে আপনাকে বিশেষ চরিত্রগুলি থেকে বাঁচতে হবে, বাক্য গঠনটি হবে git checkout 'stash@{0}' -- <filename>:)

বা অন্য ফাইলের নামে এটি সংরক্ষণ করতে:

git show stash@{0}:<full filename>  >  <newfile>

(মনে রাখবেন যে এখানে <full filename>একটি প্রকল্পের শীর্ষ ডিরেক্টরি সম্পর্কিত (ফাইলটি সম্পর্কিত মনে করুন: সম্পর্কিত stash@{0})) path

ইউসার মন্তব্যগুলিতে পরামর্শ দেয় :

আপনি যদি সেই ফাইলটি থেকে ম্যানুয়ালি কোন পরিবর্তনগুলি প্রয়োগ করতে চান তা নির্বাচন করতে চান:

git difftool stash@{0}..HEAD -- <filename>

বিবেক মন্তব্যগুলিতে যোগ করেছেন :

দেখে মনে হচ্ছে " git checkout stash@{0} -- <filename>" স্ট্যাশ সঞ্চালনের সময় হিসাবে ফাইলটির সংস্করণটি পুনরুদ্ধার করে - এটি ফাইলের স্ট্যাশড পরিবর্তনগুলি প্রয়োগ করে না (কেবল)।
পরেরটি করতে:

git diff stash@{0}^1 stash@{0} -- <filename> | git apply

( পিটারফ্লিন দ্বারা মন্তব্য করা হিসাবে , আপনার | git apply -p1কিছু ক্ষেত্রে প্রয়োজন হতে পারে, ( তিহ্যগত বিভিন্ন p1পথ থেকে একটি ) স্ল্যাশ সরিয়ে)


মন্তব্য হিসাবে: "আনস্ট্যাশ" ( git stash pop), তারপরে:

  • আপনি সূচকে কী রাখতে চান তা যুক্ত করুন ( git add)
  • বাকি স্ট্যাশ: git stash --keep-index

শেষ পয়েন্টটি আপনাকে অন্যদের স্ট্যাশ করার সময় কিছু ফাইল রাখার অনুমতি দেয়।
এটি রূপান্তরিত হয়েছে " পরিবর্তিত একাধিক ফাইলের মধ্যে কেবল একটি ফাইল কীভাবে স্ট্যাশ করা যায় "।


5
git stash popআপনি ফাইল দ্বন্দ্বের কারণে না পারলে এটি কাজ করে না । বালামুরুগান এ এর ​​উত্তরটি আমার ক্ষেত্রে সেই কৌশলটি করেছিল।
অ্যান্ড্রে

1
এর মধ্যে যদি আপনি সেই ফাইলটি থেকে যে পরিবর্তনগুলি প্রয়োগ করতে চান তা ম্যানুয়ালি নির্বাচন করতে চান তবে আপনি গিট ডিফ্টল স্ট্যাশ @ {0} ব্যবহার করতে পারেন .. হেড - <ফাইল ফাইল>
yucer

5
দেখে মনে হচ্ছে "গিট চেকআউট স্ট্যাশ @ {0} - <ফাইল নাম>" স্ট্যাশ সঞ্চালনের সময় হিসাবে ফাইলটির সংস্করণটি পুনরুদ্ধার করে - এটি সেই ফাইলের জন্য স্ট্যাশড পরিবর্তনগুলি প্রয়োগ করে না (কেবল)। পরবর্তীটি করার জন্য: "গিট ডিফার স্ট্যাশ @ {0} ^ 1 স্ট্যাশ @ {0} - <ফাইলাইল> | গিট প্রয়োগ করুন"
বিবেক

1
@JaimeM। ধন্যবাদ. আরও দৃশ্যমানতার জন্য আমি আপনার মন্তব্যে উত্তরে অন্তর্ভুক্ত করেছি।
ভোনসি

1
Assuming যে unstashউপায়ে pop, যেমন আমার মনে হচ্ছে যে এটি সম্ভবত would বেশিরভাগ ক্ষেত্রেই, এই শুধুমাত্র আংশিকভাবে প্রশ্নের উত্তর। পরবর্তী পরিবর্তনগুলি এবং / বা বাকী পরিবর্তনগুলি পপ করার সময় সংঘাত এবং / বা বিভ্রান্তি এড়াতে আপনি কীভাবে স্ট্যাশ থেকে বেছে বেছে প্রয়োগ করা টুকরোগুলি সরিয়ে ফেলবেন?
ডিলানইং 21

115
git checkout stash@{N} <File(s)/Folder(s) path> 

যেমন। সর্বশেষ স্ট্যাশ করা থেকে কেবল।

git checkout stash@{0} ./test.c ./include

12
এটা সঠিক উত্তর! নির্দিষ্ট ফাইলগুলি থেকে কেবল স্ট্যাশড পরিবর্তনগুলি প্রয়োগ করার জন্য একক লাইন কমান্ড, কবজির মতো কাজ করে!
4

1
ফাইলটির জন্য স্ট্যাশড পরিবর্তনগুলি প্রয়োগ করতে (স্রেফ): "গিট ডিফ স্ট্যাশ @ {এন} ^ 1 স্ট্যাশ @ {এন} - <ফাইলাইল> | গিট আবেদন"
বিবেক

এটি আমার পক্ষেও কাজ করে। স্ট্যাশ থেকে প্রয়োজনীয় ফাইলগুলি কেবল নির্বাচন করে চেকআউট করুন এবং আপনার কাজ শেষ হয়েছে। -aস্ট্যাশ তৈরির সময় আমি পতাকা ব্যবহার করেছি এটিতে আমি আটকে গিয়েছিলাম ।
রাজীব রঞ্জন

1
@ 4 লেভেলগুলি আমি "স্ট্যাশেড পরিবর্তনগুলি প্রয়োগ করি" বলে মনে হয় যা হয় না তাই না? আমি মনে করি "স্ট্যাশ থেকে অনুলিপি সহ আপনার কাছে যা কিছু আছে তা মুছে ফেলা" যা ঘটে।
মিসৌথ

35

আমি মনে করি ভনকের উত্তর সম্ভবত আপনি যা চান, তবে একটি নির্বাচনী "গিট প্রয়োগ" করার একটি উপায় এখানে রয়েছে:

git show stash@{0}:MyFile.txt > MyFile.txt

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

এটি আমার পক্ষে কাজ করে, যেহেতু আমি কেবল এমন কোনও ফাইল অনুলিপি করতে চেয়েছিলাম যা কেবলমাত্র স্ট্যাশে উপস্থিত থাকে এবং checkoutকোনও কিছুর যত্ন নেয় না ।
টম রাসেল

1
উইন্ডোজ পাওয়ারশেলের জন্য: git show stash@`{0`}:Path/To/MyFile.txt |sc Path/To/MyFile.txt- পিএসের জন্য বিশেষত ধনুর্বন্ধনীগুলির ব্যাখ্যা না করার জন্য ব্যাকটিকগুলি প্রয়োজনীয় এবং এটি scপ্রয়োজনীয় কারণ পিএস-র >অপারেটরটি ইউটিএফ -16 (আসলে ইউসিএস -2) এর ডিফল্ট হয় যা সম্ভবত আপনি চান না। @ বালামুরুগান এ এর ​​উত্তর এই সমস্যাগুলিতে ভোগেনা।
ইয়ান কেম্প

19

প্রথমে সমস্ত স্ট্যাসের তালিকা করুন

git stash list

stash@{0}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{1}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{2}: WIP on master: 7e450c81 Merge branch 'Offlineseite'

তারপরে কোন ফাইলগুলি স্ট্যাশে রয়েছে তা দেখান (আসুন স্ট্যাশ 1 বেছে নিন):

git stash show 1 --name-only

//Hint: you can also write
//git stash show stash@{1} --name-only

 ajax/product.php
 ajax/productPrice.php
 errors/Company/js/offlineMain.phtml
 errors/Company/mage.php
 errors/Company/page.phtml
 js/konfigurator/konfigurator.js

তারপরে আপনার পছন্দ মতো ফাইলটি প্রয়োগ করুন:

git checkout stash@{1} -- <filename>

বা পুরো ফোল্ডার:

git checkout stash@{1} /errors

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

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


1
এটি এই সম্পাদনার সাথে আরও স্পষ্ট। +1
ভোনসি

1
আমি অনেক উপায়ে চেষ্টা করেছি এবং এই পথটি আমার প্রয়োজন ছিল। আমি একটি সমস্যার মুখোমুখি হয়েছি যা git stash popঅনতিযুক্ত ফাইলের জন্য একটি ত্রুটি ফেলেছে। ধন্যবাদ.
রমিন ফিরোজ

10

আপনি যদি git stash pop(কোনও বিবাদ ছাড়াই) এটি প্রয়োগ করার পরে এটি স্ট্যাশ সরিয়ে ফেলবেন। তবে আপনি যদি git stash applyতা স্ট্যাশ তালিকা থেকে সরিয়ে না ফেলে প্যাচটি প্রয়োগ করবেন। তারপরে আপনি এর সাথে অযাচিত পরিবর্তনগুলি ফিরিয়ে আনতে পারেনgit checkout -- files...


2
এই পোস্টের দ্বন্দ্বের অংশটি পরিষ্কার করতে, আপনি git stash popএবং সেখানে দ্বন্দ্ব থাকলে, আপনাকে সেগুলি ম্যানুয়ালি ঠিক করতে হবে এবং স্ট্যাশ সরানো হবে না।
থমাস ম্যাককেবে

6

আরও একটি উপায়:

git diff stash@{N}^! -- path/to/file1 path/to/file2  | git apply -R

2
এটিই একমাত্র সঠিক উত্তর আইএমও। ব্যবহার checkoutবা showঅন্ধ শুধু আবেদন পরিবর্তনের আপনার ফাইল ওভাররাইট করবে পরিবর্তে। "আরও একটি উপায়" হ'ল একটি আন্ডারস্টেটমেন্ট।
অস্পষ্ট

1
path/to/file2আপনার ওয়ার্কস্পেসের একই ফাইলের তুলনায় আপনি যেভাবে আলাদা করতে চান তা পাচ্ছি না । দ্বিতীয় পথ ছেড়ে যাওয়া আমার পক্ষে ভাল কাজ করে। - এবং আমি -Rবিকল্পটি ব্যবহার করে একটি ত্রুটি বার্তা পেয়েছি ("বিপরীতে প্যাচ প্রয়োগ করুন", স্ট্যাশড সংস্করণটি প্যাচ করার চেষ্টা করছেন ?!)। আমার ওয়ার্কিং ভার্সনটি দেখে মনে হচ্ছে git diff stash@{N}^! -- path/to/file | git apply -
থমাস

"প্যাচ ব্যর্থ"? একটি 3-উপায় একত্রিত করার চেষ্টা করুন। ...| git apply -3 -
জন মে

6

উইন্ডোজ ব্যবহারকারীদের জন্য: কোঁকড়ানো ধনুর্বন্ধনী এর পাওয়ারসেলের বিশেষ অর্থ রয়েছে। আপনি হয় একক উদ্ধৃতি দিয়ে ঘিরে বা ব্যাকটিক দিয়ে পালাতে পারেন। উদাহরণ স্বরূপ:

git checkout 'stash@{0}' YourFile

এটি ছাড়া, আপনি একটি ত্রুটি পেতে পারেন:

Unknown switch 'e'


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