git - জিট দিয়ে পরিবর্তিত একাধিক ফাইলের মধ্যে কেবল একটি ফাইল স্ট্যাশ করবেন?




git-stash (18)

দ্রুত উত্তর

জিটের একটি নির্দিষ্ট পরিবর্তিত ফাইলটি ফিরিয়ে আনতে, আপনি নিম্নলিখিত লাইনটি করতে পারেন:

git checkout <branch-name> -- <file-path>

এখানে একটি প্রকৃত উদাহরণ:

git checkout master -- battery_monitoring/msg_passing.py

আমি কিভাবে আমার শাখায় একাধিক পরিবর্তিত ফাইল এক স্টash করতে পারেন?


সমাধান

স্থানীয় পরিবর্তন:

  • file_A (সংশোধিত) মঞ্চ না
  • file_B (সংশোধিত) মঞ্চ না
  • file_C (সংশোধিত) স্টেজ না

File_C এ শুধুমাত্র পরিবর্তনগুলির সাথে "my_stash" স্ট্যাশ তৈরি করতে:

1. git add file_C
2. git stash save --keep-index temp_stash
3. git stash save my_stash
4. git stash pop [email protected]#{1}

সম্পন্ন.

ব্যাখ্যা

  1. স্টেজিং এলাকায় file_C যোগ করুন
  2. "temp_stash" নামক একটি অস্থায়ী স্ট্যাশ তৈরি করুন এবং file_C এ পরিবর্তনগুলি রাখুন
  3. ফাইল_C তে শুধুমাত্র পরিবর্তনগুলি দিয়ে চেয়েছিলেন স্ট্যাশ ("my_stash") তৈরি করুন
  4. আপনার স্থানীয় কোডে "temp_stash" (file_A এবং file_B) এ পরিবর্তনগুলি প্রয়োগ করুন এবং স্ট্যাশ মুছুন

আপনি কি চলছে তা দেখতে পদক্ষেপগুলির মধ্যে গিট স্ট্যাটাস ব্যবহার করতে পারেন।


আপনি git stash save -p "my commit message" ব্যবহার করতে পারেন- git stash save -p "my commit message" । এই ভাবে আপনি পছন্দ করতে পারেন যা কৃপণতা যোগ করা উচিত, পুরো ফাইল পাশাপাশি নির্বাচিত করা যেতে পারে।

প্রতিটি হঙ্কের জন্য আপনাকে কয়েকটি পদক্ষেপের সাথে উত্সাহিত করা হবে:

   y - stash this hunk
   n - do not stash this hunk
   q - quit; do not stash this hunk or any of the remaining ones
   a - stash this hunk and all later hunks in the file
   d - do not stash this hunk or any of the later hunks in the file
   g - select a hunk to go to
   / - search for a hunk matching the given regex
   j - leave this hunk undecided, see next undecided hunk
   J - leave this hunk undecided, see next hunk
   k - leave this hunk undecided, see previous undecided hunk
   K - leave this hunk undecided, see previous hunk
   s - split the current hunk into smaller hunks
   e - manually edit the current hunk
   ? - print help

আপনি যখন git stash ব্যবহার করেন তখনই আপনি প্রকৃতপক্ষে পরিবর্তনগুলি বাতিল করতে চান (এবং এটি অস্থায়ীভাবে স্ট্যাশ করার জন্য গিট স্ট্যাশ ব্যবহার করবেন না), সেই ক্ষেত্রে আপনি ব্যবহার করতে পারেন

git checkout -- <file>

[ উল্লেখ্য ]

যে git stash শাখা এবং স্টাফ করছেন একটি দ্রুত এবং সহজ বিকল্প।


আমি git stash save --patch ব্যবহার করবে। আমি বিরক্তিকর হওয়ার জন্য ইন্টারঅ্যাক্টিভিটি খুঁজে পাইনি কারণ এটিতে সমস্ত ফাইলগুলিতে পছন্দসই ক্রিয়াকলাপ প্রয়োগ করার বিকল্প রয়েছে।


আমি এইরকম এবং অনুরূপ থ্রেডগুলির জন্য উত্তর এবং মন্তব্য পর্যালোচনা করেছি। সচেতন থাকুন যে কোন নির্দিষ্ট ট্র্যাক / অট্যাক্কেড ফাইলগুলি আটকাতে সক্ষম হওয়ার জন্য নিম্নলিখিত কমান্ডগুলির মধ্যে কোনটি সঠিক নয়:

  • git stash -p (--patch) : অনির্ধারিত ফাইল বাদে ম্যানুয়ালি কাঁধ নির্বাচন করুন
  • git stash -k (--keep-index) : সমস্ত ট্র্যাক / অট্যাকড ফাইলগুলি আটকে রাখুন এবং তাদের কাজের নির্দেশিকাতে রাখুন
  • git stash -u (--include-untracked) : সমস্ত ট্র্যাক / অট্যাকড ফাইলগুলি টানুন
  • git stash -p (--patch) -u (--include-untracked) : অবৈধ কমান্ড

বর্তমানে, কোনও নির্দিষ্ট ট্র্যাক / অট্যাক্কেড ফাইলগুলি আটকাতে সক্ষম হওয়া সবচেয়ে যুক্তিসঙ্গত পদ্ধতি হল:

  • অস্থায়ীভাবে ফাইলগুলিকে আপনি স্ট্যাশ করতে চান না
  • যোগ করুন এবং ঝাপসা
  • অস্থায়ী কমিটি পপ

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


এই পরিস্থিতিতে আমি git add -p (ইন্টারেক্টিভ), git commit -m blah এবং git commit -m blah তারপর প্রয়োজন হলে বাকি কি স্ট্যাশ।


একই অবস্থা। প্রতিশ্রুতিবদ্ধ এবং বুঝতে পারছি না ঠিক আছে।

git commit -a -m "message"
git log -p

উত্তর উপর ভিত্তি করে এই আমাকে সাহায্য।

# revert to previous state, keeping the files changed
git reset HEAD~
#make sure it's ok
git diff
git status
#revert the file we don't want to be within the commit
git checkout specs/nagios/nagios.spec
#make sure it's ok
git status
git diff
#now go ahead with commit
git commit -a -m "same|new message"
#eventually push tu remote
git push

একটি জটিল উপায় প্রথম সবকিছু করতে হবে:

git add -u
git commit // creates commit with sha-1 A

মূল কমিটিতে ফিরে পুনরায় সেট করুন কিন্তু নতুন কমিটি থেকে_আ_ফাইল চেকআউট করুন:

git reset --hard HEAD^
git checkout A path/to/the_one_file

এখন আপনি _one_file স্ট্যাশ করতে পারেন:

git stash

আসল কমিটিতে ফিরে আসার সময় আপনার ফাইল সিস্টেমে প্রতিশ্রুতিবদ্ধ সামগ্রী সংরক্ষণ করে সাফ করুন:

git reset --hard A
git reset --soft HEAD^

হ্যাঁ, কিছুটা অদ্ভুত ...


এখানে প্রতিটি উত্তর এত জটিল ...

"স্ট্যাশ" এ সম্পর্কে কি:

git diff /dir/to/file/file_to_stash > /tmp/stash.patch
git checkout -- /dir/to/file/file_to_stash

এই পপ ফাইল ফিরে পরিবর্তন:

git apply /tmp/stash.patch

এক ফাইল stashing এবং ফিরে পপিং হিসাবে ঠিক একই আচরণ।


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

# Save everything
git stash 

# Re-apply everything, but keep the stash
git stash apply

git checkout <"files you don't want in your stash">

# Save only the things you wanted saved
git stash

# Re-apply the original state and drop it from your stash
git stash apply [email protected]{1}
git stash drop [email protected]{1}

git checkout <"files you put in your stash">

আমি এই পৃষ্ঠায় এসেছি (আবারো) এই পৃষ্ঠায় এসেছি এবং প্রথম দুটি উত্তর পছন্দ করি নি (প্রথম উত্তরটি কেবলমাত্র উত্তরটির উত্তর দেয় না এবং আমি -p ইন্টারেক্টিভ মোডের সাথে কাজ করতে পছন্দ করি না) ।

ধারণাটি যে @ ভনকসি রিপোজিটরির বাইরে ফাইল ব্যবহার করে প্রস্তাবিত, আপনি যে পরিবর্তনগুলি চান সেগুলি সংরক্ষণ করুন, আপনার পরিবর্তনগুলিতে যে পরিবর্তনগুলি চান না সেগুলি মুছে ফেলুন এবং তারপরে আপনি যেভাবে পরিবর্তন করেছেন সেগুলি পুনরায় প্রয়োগ করুন। যাইহোক, আমি "কোথাও" হিসাবে গিট স্ট্যাশ ব্যবহার করেছি (এবং ফলস্বরূপ, শেষে একটি অতিরিক্ত ধাপ রয়েছে: আপনি যে স্ট্যাশে রেখেছেন সেগুলি সরিয়ে ফেলুন, কারণ আপনি এটিকে পাশাপাশি বাইরে সরিয়ে নিয়েছেন)।


কখনও কখনও আমি এটি করার আগে আমার শাখায় একটি সম্পর্কিত সম্পর্ক তৈরি করেছি, এবং আমি এটি অন্য শাখায় স্থানান্তরিত করতে এবং এটি আলাদাভাবে (মাস্টারের মত) প্রেরণ করতে চাই। আমি এই কাজ:

git stash
git checkout master
git stash pop
git add <files that you want to commit>
git commit -m 'Minor feature'
git stash
git checkout topic1
git stash pop
...<resume work>...

প্রথম stash এবং stash pop বাদ দেওয়া যেতে পারে, আপনি চেকআউট করার সময় আপনার সমস্ত পরিবর্তনগুলি master শাখাতে নিয়ে যেতে পারেন, কিন্তু যদি কোনও দ্বন্দ্ব না হয় তবেই। আপনি যদি আংশিক পরিবর্তনগুলির জন্য একটি নতুন শাখা তৈরি করেন তবে আপনাকে স্ট্যাশের প্রয়োজন হবে।

আপনি কোন দ্বন্দ্ব এবং কোন নতুন শাখা ধারনা এটা সহজ করতে পারেন:

git checkout master
git add <files that you want to commit>
git commit -m 'Minor feature'
git checkout topic1
...<resume work>...

স্ট্যাশ এমনকি প্রয়োজন নেই ...


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


ধরুন আপনার 3 টি ফাইল আছে

a.rb
b.rb
c.rb

এবং আপনি শুধুমাত্র b.rb এবং c.rb স্ট্যাশ করতে চান তবে a.rb নয়

আপনি এই মত কিছু করতে পারেন

# commit the files temporarily you don't want to stash
git add a.rb
git commit -m "temp" 

# then stash the other files
git stash save "stash message"

# then undo the previous temp commit
git reset --soft HEAD^
git reset

এবং আপনি সম্পন্ন করা হয়! আছে HTH।


যখন git stash -p (অথবা stash --keep-index সহ git add -p ) খুব কষ্টকর হবে, তখন আমি diff , checkout ব্যবহার এবং apply সহজ পেয়েছি:

শুধুমাত্র একটি বিশেষ ফাইল / dir "স্ট্যাশ" করতে:

git diff path/to/dir > stashed.diff
git checkout path/to/dir

তারপর পরে

git apply stashed.diff

যখন আপনি দুটি শাখাগুলির মধ্যে স্যুইচ করার চেষ্টা করেন, তখন এই পরিস্থিতি ঘটে।

" git add filepath " ব্যবহার করে ফাইল যোগ করার চেষ্টা করুন।

পরে এই লাইন চালানো

git stash --keep-index


git stash push ব্যবহার করুন, এই মত:

git stash push [--] [<pathspec>...]

উদাহরণ স্বরূপ:

git stash push -- my/file.sh

এই জিটি 2.13, বসন্ত 2017 সালে মুক্তি থেকে পাওয়া যায়।


সতর্কতা

মতামত হিসাবে উল্লিখিত, এই staged এবং unstaged উভয়, স্ট্যাশ মধ্যে সবকিছু রাখে। স্ট্যাশ সম্পন্ন হওয়ার পরেই - ইনডেক্স ইনডেক্স কেবলমাত্র সূচী ছেড়ে দেয়। আপনি পরে স্ট্যাশ পপ যখন এই একত্রীকরণ বিরোধ হতে পারে।

এই আপনি পূর্বে যোগ করা না যে সবকিছু stash করা হবে। শুধু আপনি রাখতে চান জিনিস git add করুন, তারপর চালানো।

git stash --keep-index

উদাহরণস্বরূপ, যদি আপনি একাধিক পরিবর্তনকে একাধিক পরিবর্তনয় বিভক্ত করতে চান তবে আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন:

  1. git rebase -i <last good commit>
  2. edit হিসাবে কিছু পরিবর্তন চিহ্নিত edit
  3. git reset HEAD^
  4. git add <files you want to keep in this change>
  5. git stash --keep-index
  6. প্রয়োজনীয় হিসাবে জিনিস ঠিক করুন। কোন পরিবর্তন git add করতে ভুলবেন না।
  7. git commit
  8. git stash pop
  9. পুনরাবৃত্তি, # 5 থেকে, প্রয়োজন হিসাবে।
  10. git rebase --continue




git-stash