গিটের সাথে পরিবর্তিত একাধিক ফাইলের মধ্যে কেবল একটি ফাইল রয়েছে?


3066

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


109
আমি মনে করি না @ বুকজোরের গৃহীত উত্তরটি যেমন জিজ্ঞাসা করা হয়েছিল ঠিক তেমন একটি সঠিক উত্তর। git stash --keep-indexসূচকে রাখে, তবে এটি সমস্ত কিছুকেই সংযুক্ত করে - উভয় সূচক এবং বাইরেও।
রমন

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

1
@ জেসুসফ্রেইক হ্যাঁ, ফলাফলটি আমি ৫০ জন রেপিকে বাঁচাতে পেরেছি :) এটি ঠিক যে আপনি যদি "আংশিক স্ট্যাশ কচ্ছপ" অনুসন্ধান করার চেষ্টা করেন তবে আপনাকে এই প্রশ্নে পুনঃনির্দেশিত করা হবে। কচ্ছপটি এখানে জনপ্রিয় বিষয় বলে মনে হচ্ছে না stackoverflow.com/questions/tagged/tortoisegit
আন্তোনিও

7
>>>>>>>>> git diff -- *filename* > ~/patchতারপরে git checkout -- *filename*এবং পরে আপনি প্যাচটি পুনরায় প্রয়োগ করতে পারেনgit apply ~/patch
neaumusic

36
নীচের বেশিরভাগ বিদ্যমান উত্তরগুলি পুরানো। গিট 2.13 (Q2 2017) যেহেতু এটি সমর্থন করে git stash push [--] [<pathspec>...]
ওহাদ স্নাইডার

উত্তর:


1372

দাবি অস্বীকার: নিম্নলিখিত উত্তরটি গিট 2.13 এর আগে গিটের জন্য। 2.13 এবং তারও বেশি গিটের জন্য, আরও একটি উত্তর উত্তর নীচে দেখুন


সতর্কতা

মন্তব্যে উল্লিখিত হিসাবে, এটি স্ট্যাশড এবং অ স্টেজ উভয়ই স্ট্যাশগুলিতে রাখে। - সংরক্ষণ-সূচক স্ট্যাশ সম্পন্ন হওয়ার পরে কেবল সূচকটি একা ফেলে দেয়। আপনি পরে স্ট্যাশ পপ করলে এটি মার্জ সংঘাত সৃষ্টি করতে পারে।


এটি পূর্বে যোগ না করা সমস্ত কিছুকে স্ট্যাশ করবে। git addআপনি যে জিনিসগুলি রাখতে চান কেবল তা চালান।

git stash --keep-index

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

  1. git rebase -i <last good commit>
  2. হিসাবে কিছু পরিবর্তন চিহ্নিত করুন 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

47
আমি এই পদ্ধতির আরো অনেক কিছু সহজ হতে খুঁজে পেয়েছেন: stackoverflow.com/a/5506483/457268
k0pernikus

561
আমি নিশ্চিত নই যে কেন এটি উপবিষ্ট করা হচ্ছে। প্রত্যেকের অবশ্যই আমার চেয়ে আলাদা প্রত্যাশা থাকতে হবে। আসল পোস্টটি জিজ্ঞাসা করছে "আমি কীভাবে আপত্তিহীন পরিবর্তনের একটি অংশকে স্ট্যাশ করব?" আমি যখন ব্যবহার করি git stash save -k, হ্যাঁ সূচক (সবুজ ইন git stat) সংরক্ষণ করা হয়, তবে পুরো পরিবর্তনটি (সবুজ এবং লাল উভয়ই) স্ট্যাশে চলে যায়। এটি ওপির অনুরোধটিকে লঙ্ঘন করে, "কেবলমাত্র কিছু পরিবর্তন আটকানো"। আমি কেবল লাল কিছু (ভবিষ্যতের ব্যবহারের জন্য) স্ট্যাশ করতে চাই।
পিস্তোস

70
আপনি যদি @ পিস্তোস দ্বারা উত্থিত প্রশ্নের উত্তরটি সম্পর্কে বেশি আগ্রহী হন (যেমনটি আমি ছিলাম) তবে এখানে দেখুন: stackoverflow.com/questions/5506339/…
রমন

27
@ রমন: দুর্দান্ত! git stash -pঠিক আমি যা খুঁজছিলাম আমি অবাক হই যে এই সুইচটি সম্প্রতি যুক্ত করা হয়েছিল কিনা।
পিস্তোস

14
সতর্কতা: নষ্ট git stash --keep-indexহয়ে গেছে। আপনি যদি আরও পরিবর্তন করেন তবে git stash popপরে মার্জ সংঘাতগুলি পেতে চেষ্টা করুন কারণ স্ট্যাশগুলিতে আপনার রাখা পরিবর্তিত ফাইলগুলি কেবল অন্তর্ভুক্ত নয় you উদাহরণস্বরূপ: আমি এ এবং বি ফাইলগুলি পরিবর্তন করি, তারপর বি স্ট্যাশ করি, কারণ আমি এ এর ​​পরিবর্তনগুলি পরীক্ষা করতে চাই; আমি এ এর ​​পরে একটি সমস্যা পেয়েছি যা আমি তার পরে ঠিক করে দিই; আমি ক; এখন আমি আনস্টাশ করতে পারছি না কারণ A এর পুরাতন সংস্করণ কোনও সংযোজন বিরোধের কারণ হিসাবে কোনও ভাল কারণে স্ট্যাশে রয়েছে। অনুশীলনে এ এবং বি অনেকগুলি ফাইল হতে পারে, এমনকি বাইনারি চিত্র বা অন্য কিছু হতে পারে, তাই আমাকে মূলত বি ছেড়ে দিতে হবে এবং বি হারাতে হবে
rjmunro

3014

আপনি ব্যবহার করতে পারেন 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

5
এটা ছিল না. এটি সত্যের প্রায় 7 বছর পরে দার্কসের কাছ থেকে ধার করা হয়েছিল।
নাম

6
আমি একজন কচ্ছপগ্রাহী আসক্ত। তবে কচ্ছপটি সমর্থন করে না stash -p। আমি এই উত্তরটি পুরস্কৃত করি কারণ এটি সর্বাধিক ইন্টারেক্টিভ / ব্যবহারকারী বান্ধব।
আন্তোনিও

27
আপনি যোগ করতে চাইতে পারেন: git stash save -p my stash message; যেহেতু তর্ককারীদের আদেশ খুব স্বজ্ঞাত নয় ...
ক্রিস মেইস

15
এই এবং এর মধ্যে git log -p, আমি মনে করি -pপতাকাটির অর্থ অবশ্যই "দুর্দান্ত জিনিসটি করতে চাই যা করতে চাই তবে কীভাবে প্রকাশ করতে হয় তা জানি না"।
কাইল স্ট্র্যান্ড

2
কেন পৃথিবীতে এই দুর্দান্ত উত্তরটি দ্বাদশ অবস্থানে ?? এই সমস্ত 0, +1, +2 উত্তর পরে ??????
ডেনিসফ্ল্যাশ

544

যেহেতু গিটটি মূলত সমস্ত সংগ্রহস্থল সামগ্রী এবং সূচি পরিচালনা করতে হয় (এবং এক বা একাধিক ফাইল নয়), তাই git stashঅবাক হওয়ার মতো নয়,সমস্ত কার্যনির্বাহী ডিরেক্টরি সহ

প্রকৃতপক্ষে, গিট 2.13 (Q2 2017) থেকে আপনি পৃথক ফাইলগুলি স্ট্যাশ করতে পারেন git stash push:

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

যখন pathspec' git stash push' দেওয়া হয় , নতুন স্ট্যাশগুলি কেবলমাত্র প্যাথস্পেকের সাথে মেলে এমন ফাইলগুলির জন্য পরিবর্তিত রাজ্যগুলি রেকর্ড করে যে আরও জন্য " নির্দিষ্ট ফাইলগুলিতে স্ট্যাশ পরিবর্তনগুলি " দেখুন।

সরলীকৃত উদাহরণ:

 git stash push path/to/file

এই বৈশিষ্ট্যটির জন্য পরীক্ষার কেস আরও কয়েকটি বিকল্প বন্ধ দেখায়:

test_expect_success 'stash with multiple pathspec arguments' '
    >foo &&
    >bar &&
    >extra &&
    git add foo bar extra &&

    git stash push -- foo bar &&   

    test_path_is_missing bar &&
    test_path_is_missing foo &&
    test_path_is_file extra &&

    git stash pop &&
    test_path_is_file foo &&
    test_path_is_file bar &&
    test_path_is_file extra

আসল উত্তরটি (নীচে, জুন ২০১০) আপনি স্ট্যাশ করতে চান তা ম্যানুয়ালি নির্বাচন করার বিষয়ে।

কেসব্যাশ মন্তব্য:

এটি ( stash --patchআসল সমাধান) দুর্দান্ত, তবে প্রায়শই আমি প্রচুর ফাইল সংশোধন করেছি তাই প্যাচ ব্যবহার করা বিরক্তিকর

bukzor এর উত্তর (upvoted, নভেম্বর 2011) আরো একটি বাস্তবসম্মত সমাধান প্রস্তাব দেওয়া উপর ভিত্তি করে
git add+ +git stash --keep-index
গিয়ে দেখুন এবং তার উত্তরটিকে অগ্রাহ্য করুন, যা অফিসিয়াল হওয়া উচিত (আমার পরিবর্তে))

এই বিকল্প সম্পর্কে, chhh মন্তব্যগুলিতে একটি বিকল্প কর্মপ্রবাহ দেখায় :

git reset --softআপনার স্পষ্ট মঞ্চটি ফিরে পেতে আপনার " " এমন স্ট্যাশ এর পরে উচিত :
মূল অবস্থাটি - যা একটি স্পষ্ট মঞ্চ অঞ্চল এবং শুধুমাত্র কিছু নির্বাচিত বিনা পর্যায়ক্রমিক পরিবর্তন সহ, সূচকটি বিন্দুতে পুনরায় সেট করতে পারে (ছাড়াই) আপনার মতো কিছু করা - bukzor - did)।


(আসল উত্তর জুন ২০১০: ম্যানুয়াল স্ট্যাশ)

তবুও, git stash save --patchআপনি পরে আংশিক স্ট্যাশিং অর্জন করতে পারবেন:

এর সাহায্যে --patchআপনি ইন্টারেক্টিভভাবে হ্যাড এবং কার্যনির্বাহী গাছের মধ্যে পৃথক পৃথক থেকে কুকুরগুলি বেছে নিতে পারেন as
স্ট্যাশ এন্ট্রি এমনভাবে তৈরি করা হয় যে এর সূচক রাজ্যটি আপনার সংগ্রহস্থলের সূচকের রাজ্যের সমান এবং এর ওয়ার্ক্ট্রিতে আপনি কেবল ইন্টারেক্টিভভাবে নির্বাচিত পরিবর্তনগুলি অন্তর্ভুক্ত করেন। তারপরে নির্বাচিত পরিবর্তনগুলি আপনার ওয়ার্কট্রি থেকে ফিরে ঘুরানো হবে।

তবে এটি সম্পূর্ণ সূচক (যা আপনি যা চান তা ইতোমধ্যে ইন্ডেক্সযুক্ত অন্যান্য ফাইল অন্তর্ভুক্ত থাকতে পারে) এবং একটি আংশিক ওয়ার্কট্রি (যা আপনি স্ট্যাশ করতে চান তার মতো দেখতে পারে) সংরক্ষণ করবে।

git stash --patch --no-keep-index

একটি ভাল ফিট হতে পারে।


যদি --patchকাজ না করে তবে ম্যানুয়াল প্রক্রিয়াটি হতে পারে:

এক বা একাধিক ফাইলের জন্য একটি মধ্যবর্তী সমাধানটি হ'ল:

  • এগুলিকে গিট রেপোর বাইরে অনুলিপি করুন
    (আসলে, অ্যালোটেলাক্রাম একটি আকর্ষণীয় বিকল্প প্রস্তাব করেছে )
  • git stash
  • তাদের আবার অনুলিপি করুন
  • git stash # এবার, আপনি যে ফাইলগুলি চান তা স্ট্যাশ করা হয়
  • git stash pop stash@{1} # আপনার সমস্ত ফাইল পরিবর্তন পুনরায় প্রয়োগ করুন
  • git checkout -- afile # স্থানীয় কোনও পরিবর্তনের আগে ফাইলটি হেড কন্টেন্টে পুনরায় সেট করুন

বরং এই জটিল প্রক্রিয়া শেষে, আপনার কাছে কেবল এক বা একাধিক ফাইল স্ট্যাশ করা থাকবে।


3
এটি দুর্দান্ত, তবে প্রায়শই আমি প্রচুর ফাইল পরিবর্তন করেছি তাই প্যাচ ব্যবহার করা বিরক্তিকর
কেসব্যাশ

6
@ ভনসি: উত্তরে প্রতি মাত্র একটি উত্তর দেওয়া ভাল স্টাইল। এছাড়াও, আপনার নিজের মধ্যে অন্যের উত্তরগুলি অনুলিপি-পেস্ট করা খারাপ আচরণ is
বুকজোর

3
@ বুকজোর: আমার সম্পাদিত উত্তরটি অনুপযুক্ত মনে হলে আমি দুঃখিত। আমার একমাত্র উদ্দেশ্য ছিল আপনার উত্তরটি আরও দৃশ্যমান করা। এই উদ্দেশ্যটি আরও পরিষ্কার করার জন্য আমি আবার আমার পোস্টটি সম্পাদনা করেছি।
ভোনসি

1
@Kal: TRUE, stackoverflow.com/a/13941132/6309 একটি প্রস্তাব দেওয়া git reset(মিশ্র)
VonC

3
git is fundamentally about managing a all repository content and index and not one or several files- এটি সমস্যার সমাধানের ওভার ছায়ায় বাস্তবায়ন; এটি ব্যাখ্যা, কিন্তু ন্যায়সঙ্গত নয়। যে কোনও উত্স নিয়ন্ত্রণ সিস্টেমটি "বেশ কয়েকটি ফাইল পরিচালনা" সম্পর্কে। কী মন্তব্যগুলি সর্বাধিক উত্সাহিত হয় তা দেখুন।
ভিক্টর সার্জিইঙ্কো

90

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

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

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

তারপরে

git apply stashed.diff

1
git add -pউপরে আমার নিজের উত্তরে উল্লিখিত আকর্ষণীয় বিকল্প । +1 টি।
ভনসি

11
মনে রাখবেন যে আপনার কাছে বাইনারি ফাইল রয়েছে (পিএনজি-র মতো) তারা পৃথক ফাইলে আউটপুট হবে না। সুতরাং এটি কোনও 100% সমাধান নয়।
void.pointer

1
@ রবার্টডাইলি: এটি আমার কাছে একটি আকর্ষণীয় বিষয়, git diff > file.diffএবং git applyআমার স্বাভাবিক আংশিক স্ট্যাশ সরঞ্জামও। git stash -pবৃহত্তর চেঞ্জসেটের জন্য আমাকে স্যুইচিংয়ের বিষয়টি বিবেচনা করতে হবে ।
thekingoftruth

1
@thekingoftruth এখানে ওরফে আমি প্যাচ ফাইল তৈরি করতে ব্যবহার করা হয়, এবং এটি আছে সমর্থন বাইনেরিতে: patch = log --pretty=email --patch-with-stat --reverse --full-index --binary। দ্রষ্টব্য, তবে, প্যাচ প্রতিশ্রুতিবদ্ধ হওয়ার জন্য এটির জন্য আপনার পরিবর্তনগুলি দরকার।
void.pointer

2
ফাইলটি স্ট্যাশ করার মতো কিছু হলে এটি আমার পক্ষে পরিষ্কারভাবে কাজ করছে না ../../foo/bar.txt। প্যাচটি ঠিকঠাক উত্পন্ন করে, তবে প্যাচটি প্রয়োগ করার জন্য আমাকে পুনরায় সংগ্রহস্থলটিতে যেতে হবে। সুতরাং যদি আপনার এটির সাথে সমস্যা হয় - কেবল এটি নিশ্চিত করুন যে আপনি এটি সংগ্রহস্থল রুট ডিরেক্টরি থেকে করছেন।
মাইকেল অ্যান্ডারসন

86

এটির git stash pushমতো ব্যবহার করুন :

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

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

git stash push -- my/file.sh

এটি 2017 সালের বসন্তে প্রকাশিত গিট 2.13 সাল থেকে উপলব্ধ।


1
তবে আমি আমার উত্তরটিতে git stash pushইতিমধ্যে গত মার্চ মাসে 5 মাস আগে উল্লেখ করেছি। এবং আমি এখানে নতুন গিট 2.13 কমান্ডটি বিশদভাবে জানিয়েছি: stackoverflow.com/a/42963606/6309
ভনসি

আমি খুশি যে গিট এত তাড়াতাড়ি এগিয়ে চলেছে, দীর্ঘ সময়ের জন্য এটি সম্ভব ছিল না এবং তারপরে 2.13 প্রকাশিত হয় এবং হঠাৎই একটি সহজ সমাধান পাওয়া যায়!
স্যান্ডস্ট্রোম

1
@ ভনসি আপনি ঠিক বলেছেন, আপনি সঠিক উত্তরটিও উল্লেখ করেছেন, তবে, দুটি উত্তরের মধ্যে এইটি পড়তে সহজ (কোনও বিভ্রান্তিকর পাঠ্য নেই এবং এর উদাহরণও নেই)। পরিবর্তে তাদের পরিবর্তে আপনার উত্তরটি সম্পাদনা করা উচিত ছিল
ইউটোপিক

@ উটপিক আপনি আমাকে "ঠিক বলেছেন" তে এসেছিলেন ... তবে হ্যাঁ, আমি একটি উত্তর অন্তর্ভুক্ত করতে আমার উত্তরটি সম্পাদনা করেছি।
ভনসি

তাহলে কি কেউ git stash applyস্ট্যাশড পরিবর্তনগুলি পুনরুদ্ধার করতে ব্যবহার করবে?
চাদ

49

ধরা যাক আপনার কাছে 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।


29

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

# 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 stash@{1}
git stash drop stash@{1}

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

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

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


1
আমি এই পদ্ধতির সর্বাধিক পছন্দ। এটি স্ট্যাশ এবং রিভার্ট কমান্ড ব্যবহার করে কচ্ছপগুলিতে একটি সহজ ওয়ার্কফ্লো সরবরাহ করে।
CH

অবস্থানগুলি ব্যবহার করে এসও এর উত্তরগুলি উল্লেখ করা ভাল নয় able রেটিং পরিবর্তনের সাথে সাথে অবস্থানগুলিও পরিবর্তিত হয়।
ব্রায়ান অ্যাশ

2
@ ব্রায়ানআশ ওয়েল, এটি এখানে গুরুত্বপূর্ণ বলে মনে হচ্ছে না। অন্যান্য উত্তরগুলি উল্লেখ করার পরিবর্তে আমি একটি উপাখ্যান দিচ্ছি। বার্তাটি হ'ল আমি সম্প্রদায়টি পছন্দ করা উত্তরগুলি পছন্দ করিনি এবং এই উত্তরগুলিতে আসলে যা আছে তা নয়। তদ্ব্যতীত, দ্বিতীয় এবং তৃতীয় উত্তরের মধ্যে ৯০০ ভোটের ব্যবধান অদূর ভবিষ্যতে এটির সম্ভাবনা কমিয়ে দেয়, এবং যদি এটি কখনও পরিবর্তিত হয় তবে আমি সর্বদা এটি "সময়ে উত্তরগুলির শীর্ষে" বলতে সম্পাদনা করতে পারি। সত্যিই, আমি দেখতে পাচ্ছি না যে এই পরিস্থিতিতে এটি কোনও ধরণের সমস্যা।
জ্যাস্পার

23

আপডেট (২/১১/২০১৫) - দ্বন্দ্বের পরিস্থিতি আরও ভালভাবে পরিচালনা করতে আমি স্ক্রিপ্টটি কিছুটা আবার লিখেছি, যা এখন .rej ফাইলের পরিবর্তে নিমজ্জিত বিরোধ হিসাবে উপস্থাপন করা উচিত।


@ বুকজোরের পদ্ধতির বিপরীতটি করা প্রায়শই আমি আরও স্বজ্ঞাত মনে করি। এটি হ'ল কিছু পরিবর্তন মঞ্চ করা এবং তারপরে কেবল সেই পর্যায়ক্রমে পরিবর্তনগুলি সংযুক্ত করা।

দুর্ভাগ্যক্রমে, গিট একটি গিট স্ট্যাশ প্রস্তাব করে না - কেবলমাত্র সূচক বা অনুরূপ, তাই আমি এটি করার জন্য একটি স্ক্রিপ্ট বেতার দিয়েছি।

#!/bin/sh

# first, go to the root of the git repo
cd `git rev-parse --show-toplevel`

# create a commit with only the stuff in staging
INDEXTREE=`git write-tree`
INDEXCOMMIT=`echo "" | git commit-tree $INDEXTREE -p HEAD`

# create a child commit with the changes in the working tree
git add -A
WORKINGTREE=`git write-tree`
WORKINGCOMMIT=`echo "" | git commit-tree $WORKINGTREE -p $INDEXCOMMIT`

# get back to a clean state with no changes, staged or otherwise
git reset -q --hard

# Cherry-pick the index changes back to the index, and stash.
# This cherry-pick is guaranteed to succeed
git cherry-pick -n $INDEXCOMMIT
git stash

# Now cherry-pick the working tree changes. This cherry-pick may fail
# due to conflicts
git cherry-pick -n $WORKINGCOMMIT

CONFLICTS=`git ls-files -u`
if test -z "$CONFLICTS"; then
    # If there are no conflicts, it's safe to reset, so that
    # any previously unstaged changes remain unstaged
    #
    # However, if there are conflicts, then we don't want to reset the files
    # and lose the merge/conflict info.
    git reset -q
fi

আপনি উপরের স্ক্রিপ্টটিকে git-stash-indexআপনার পথের যে কোনও জায়গায় সংরক্ষণ করতে পারেন এবং তারপরে এটিকে গিট স্ট্যাশ-সূচক হিসাবে ডেকে আনতে পারেন

# <hack hack hack>
git add <files that you want to stash>
git stash-index

এখন স্ট্যাশটিতে একটি নতুন এন্ট্রি রয়েছে যা কেবলমাত্র আপনি পালটেছিলেন এমন পরিবর্তনগুলি অন্তর্ভুক্ত করে এবং আপনার কার্যকারী গাছটিতে এখনও কোনও স্টেস্টেড পরিবর্তন নেই।

কিছু ক্ষেত্রে, কার্যক্ষম গাছের পরিবর্তনগুলি সূচী পরিবর্তনের উপর নির্ভর করে, সুতরাং আপনি যখন সূচকগুলি পরিবর্তন করেন, কার্যক্ষম গাছের পরিবর্তনের সাথে বিরোধ হয়। এক্ষেত্রে, আপনি গিমে সংযোজন / গিট মার্জেটুল / ইত্যাদি দিয়ে সমাধান করতে পারেন এমন সাধারণ নিমজ্জনহীন দ্বন্দ্বগুলি পাবেন।


pushdপরিবর্তে cdএবং popdস্ক্রিপ্টের শেষে সুপারিশ করুন যাতে স্ক্রিপ্টটি সফল হয়, ব্যবহারকারী এটি চালানোর আগে যেমন একই ডিরেক্টরিতে শেষ হয়।
Nate

1
@ নাট: যতদূর আমি জানি, স্ক্রিপ্টটি উত্সাহিত করা হলে এটি কেবল ব্যবহারকারীর জন্য ডিরেক্টরি পরিবর্তন করা উচিত। আপনি যদি স্ক্রিপ্টটি সাধারণত চালনা করেন (~ / bin / git-stash-index), অথবা git (git stash-index) এর মাধ্যমে, এটি একটি পৃথক টার্মিনাল সেশনে চালিত হয় এবং সেই অধিবেশনটিতে কোনও কার্যনির্বাহী ডিরেক্টরি পরিবর্তন প্রভাবিত করে না ব্যবহারকারীর টার্মিনাল সেশনে কর্মরত ডিরেক্টরি আপনি যখন সাধারণ ব্যবহারের ক্ষেত্রে সচেতন হন যখন এটি সত্য হয় না? (স্ক্রিপ্টটি সোর্সিং ব্যতীত, যা আমি "সাধারণ" বিবেচনা করব না)
যিশুফ্রেইক

20

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

$ git stash -- filename.ext

যদি এটি একটি অপ্রকাশিত / নতুন ফাইল হয় তবে আপনাকে প্রথমে এটি স্টেজ করতে হবে।

এই পদ্ধতিটি গিট সংস্করণ 2.13+ এ কাজ করে


এই উত্তরটি ভার্বোস, এটি সংক্ষিপ্ত। এটি যদি কাউকে সহায়তা করে তবে আমি তা ছেড়ে দেব। এই পৃষ্ঠার কেউই এই বাক্য গঠন এবং ফলাফলটির উল্লেখ করেনি - তারা পরিবর্তে it গিট স্ট্যাশ পুশ` উল্লেখ করে `
সিলোকাল

এই উত্তরটি আমি খুঁজছিলাম। ধন্যবাদ! +1
নিকডপ

19

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


2
আপনি স্টেস্ট না করা সম্পাদনা সহ একটি শাখা তৈরি করতে পারবেন না। আপনি সমস্ত সম্পাদনাগুলি সহজেই একটি নতুন শাখায় স্থানান্তর করতে পারবেন (স্ট্যাশ / স্ট্যাশ পপ) তবে তারপরে আপনি আবার এক বর্গক্ষেত্রে ফিরে আসবেন: অন্যটি না হারিয়ে কেবল কীভাবে আপনার শাখাটি পরীক্ষা করবেন?
বুকজর

7
স্থানীয় পরিবর্তন থাকলে আপনি শাখাগুলি স্যুইচ করতে পারবেন না । তবে, আপনি একটি নতুন শাখা তৈরি করতে পারেন এবং বেছে বেছে ফাইল যুক্ত / প্রতিশ্রুতিবদ্ধ করতে পারেন, এবং তারপরে অন্য একটি শাখা তৈরি করতে পারেন এবং একই পুনরাবৃত্তভাবে করতে পারেন ... তারপরে মূল শাখাটি চেকআউট করুন এবং নির্বাচিতভাবে আবার মেশিন করুন। আমি কেবল এটি করেছি। এটি জিনিসগুলি করার প্রাকৃতিক উপায় বলে মনে হচ্ছে আপনি মূলত বৈশিষ্ট্য শাখা তৈরি করছেন।
iain

3
@ যদি আপনার স্থানীয় পরিবর্তন হয় তবে আপনি শাখাগুলি স্যুইচ করতে পারেন, যতক্ষণ না তাদের একত্রীকরণের প্রয়োজন হয় না। উদাহরণ গিস্ট দেখুন । এটি অন্তত Git v2.7.0 হিসাবে সত্য।
কলিন ডি বেনেট

18

আপনি কেবল এটি করতে পারেন:

git stash push "filename"

বা একটি alচ্ছিক বার্তা সহ

git stash push -m "Some message" "filename"

1
এটি নতুন কিছু যোগ করে না। গিট স্ট্যাশ পুশ ইতিমধ্যে একাধিক
উত্তরে

12

উদাহরণস্বরূপ, একটি ফাইলের জন্য নিম্নলিখিত কোডটি সংরক্ষণ করুন stash। ব্যবহার হয় stash <filename_regex>। যুক্তি হ'ল ফাইলের সম্পূর্ণ পথের নিয়মিত প্রকাশ। উদাহরণস্বরূপ, a / b / c.txt, stash a/b/c.txtবা stash .*/c.txt, ইত্যাদি স্ট্যাশ করা

$ chmod +x stash
$ stash .*.xml
$ stash xyz.xml

ফাইলটিতে অনুলিপি করার কোড:

#! /usr/bin/expect --
log_user 0
set filename_regexp [lindex $argv 0]

spawn git stash -p

for {} 1 {} {
  expect {
    -re "diff --git a/($filename_regexp) " {
      set filename $expect_out(1,string)
    }
    "diff --git a/" {
      set filename ""
    }
    "Stash this hunk " {
      if {$filename == ""} {
        send "n\n"
      } else {
        send "a\n"
        send_user "$filename\n"
      }
    }
    "Stash deletion " {
      send "n\n"
    }
    eof {
      exit
    }
  }
}

2
দুর্দান্ত পদ্ধতি। আমি উত্তর হিসাবে এটি নেওয়া হবে। ভবিষ্যতের পাঠকদের জন্য পরামর্শ: আপনাকে পুরো পথেই মিলতে হবে। যেমন stash subdir / foo.c
er0

12

আপনি যখনই ব্যবহার করেন ঠিক তখনই আপনি পরিবর্তনগুলি বাতিল করতে চান git stash(এবং সাময়িকভাবে স্ট্যাশ করতে গিট স্ট্যাশ ব্যবহার করবেন না) সেক্ষেত্রে আপনি ব্যবহার করতে পারেন

git checkout -- <file>

[ দ্রষ্টব্য ]

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


8

গন রেপোর বাইরে ফাইল অনুলিপি করার ক্ষেত্রে ভনসের 'ইন্টারমিডিয়েট' সমাধানের সমস্যাটি হ'ল আপনি পথের তথ্য হারাচ্ছেন, যা কিছুটা ঝামেলা পরে পরে একগুচ্ছ ফাইলগুলি অনুলিপি করে তোলে।

একটি অনুলিপি ব্যবহারের পরিবর্তে অনুলিপি ব্যবহার করা সহজ (একই ধরণের সরঞ্জাম সম্ভবত এটি করবে):

  • tar cvf /tmp/stash.tar path / to / some / file path / to / some / other / file (... ইত্যাদি)
  • গিট চেকআউট পাথ / থেকে / কিছু / ফাইল পাথ / কিছু / অন্য / ফাইল /
  • গিট স্ট্যাশ
  • tar xvf /tmp/stash.tar
  • ইত্যাদি (ভনসির 'মধ্যবর্তী' পরামর্শ দেখুন)

checkout -fপ্রয়োজন নেই, checkout(ছাড়া -f) যথেষ্ট, আমি উত্তর আপডেট করেছি।
অ্যালিটেলাক্রাম

8

কখনও কখনও আমি আমার শাখায় প্রতিশ্রুতিবদ্ধ হওয়ার পূর্বে একটি সম্পর্কহীন পরিবর্তন করেছি এবং আমি এটিকে অন্য একটি শাখায় স্থানান্তরিত করতে এবং পৃথকভাবে (মাস্টারের মতো) প্রতিশ্রুতিবদ্ধ করতে চাই। আমি এটা করি:

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>...

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


8

সোর্স ট্রি ব্যবহার করে এটি 3 ধাপে সহজেই করা যায়।

  1. আপনি স্ট্যাশ হওয়া চাই না এমন সমস্ত কিছু অস্থায়ীভাবে করুন।
  2. গিট অন্য সমস্ত কিছু যুক্ত করুন, তারপরে এটি স্ট্যাস করুন।
  3. গিট রিসেট চালিয়ে আপনার অস্থায়ী শুরুর আগে কমিটকে লক্ষ্য করে আপনার অস্থায়ী প্রতিশ্রুতিটি পপ করুন।

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


8

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


3
এই উত্তরের পক্ষে খুব অল্প সমর্থন রয়েছে এতে অবাক হয়ে গেল, এটি কোনও প্রবন্ধের প্রয়োজন ছাড়াই সেরা সমাধান।
রোবস্টারবাক

অবশ্যই ভাল উত্তর, git stash -pআপনাকে দ্রুত একটি সম্পূর্ণ ফাইল স্ট্যাশ করার অনুমতি দেয় এবং পরে ছাড়তে দেয়।
রিচার্ড ডালি 13

7

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

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

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

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

git apply /tmp/stash.patch

কোনও ফাইলকে স্ট্যাশ করা এবং এটিকে ফিরে ফিরানো ঠিক একই আচরণ।


আমি চেষ্টা করেছিলাম কিন্তু কিছুই হয় না। আমার যখন git applyকোনও ত্রুটি নেই তবে পরিবর্তনগুলিও আবার ফিরিয়ে আনা হবে না
ক্লিমেন্টওয়াল্টার

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

4

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

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

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

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

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


4

সমাধান

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

  • ফাইল_এ (পরিবর্তিত) মঞ্চস্থ নয়
  • ফাইল_বি (পরিবর্তিত) মঞ্চস্থ নয়
  • ফাইল_সি (সংশোধিত) মঞ্চস্থ নয়

কেবল ফাইল_ সি- র পরিবর্তনের সাথে একটি "স্ট্যাশ" মাই স্ট্যাশ তৈরি করতে :

1. git add file_C
2. git stash save --keep-index temp_stash
3. git stash save my_stash
4. git stash pop stash@#{1}

সম্পন্ন.


ব্যাখ্যা

  1. মঞ্চ অঞ্চলে file_C যুক্ত করুন
  2. "টেম্প_স্ট্যাশ" নামে একটি অস্থায়ী স্ট্যাশ তৈরি করুন এবং ফাইল_সিতে পরিবর্তনগুলি রাখুন
  3. কেবল ফাইল_সি-তে পরিবর্তন করে ওয়ান্ড স্ট্যাশ ("মাই_স্ট্যাশ") তৈরি করুন
  4. আপনার স্থানীয় কোডে "টেম্প_স্ট্যাশ" (ফাইল_এ এবং ফাইল_বি) এর পরিবর্তনগুলি প্রয়োগ করুন এবং স্ট্যাশ মুছুন

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


3

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

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

পরে এই লাইনটি কার্যকর করুন

git stash --keep-index


3

একটি একক ফাইল স্ট্যাশ করতে git stash --patch [file]

এই প্রম্পট যাচ্ছে: Stash this hunk [y,n,q,a,d,j,J,g,/,e,?]? ?। কেবল টাইপ করুন a(এই হুঙ্কটি লুকিয়ে রাখুন এবং পরে ফাইলগুলিতে সমস্ত কুকুর) এবং আপনি ভাল আছেন।


pushহিসাবে অনুপস্থিতgit stash push --patch [file]
ফিলিপ এস্পেরান্ডিও

@ ফিলিপএস্পেরান্ডিও pushকেবল গিটের আরও সাম্প্রতিক সংস্করণগুলিতে কাজ করে save। উভয় ক্ষেত্রেই pushবা ফোন saveকরে বোঝানো হয়েছে stash: "কোনও যুক্তি ছাড়াই গিট স্ট্যাশ কল করা গিট স্ট্যাশ পুশের সমতুল্য", ডক্স
প্যাট্রিক

2

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

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

2

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


2

কমান্ড লাইনে এটি কীভাবে করা যায় তা আমি জানি না, কেবল উত্স ট্রি ব্যবহার করে। বলুন যে আপনি ফাইল এ বদলেছেন এবং বি বিতে দুটি পরিবর্তনের শিকার রয়েছে আপনি যদি ফাইল বিতে কেবল দ্বিতীয় হুঙ্ককে আটকে রাখতে চান এবং অন্য সব কিছু ছেড়ে যান, এটি করুন:

  1. স্টেজ সব
  2. আপনার কার্যকরী অনুলিপিতে এমন পরিবর্তনগুলি সম্পাদন করুন যা ফাইল এ এর ​​সমস্ত পরিবর্তন পূর্বাবস্থায় ফিরে আসে (উদাঃ বাহ্যিক ডিফ সরঞ্জামটি চালু করুন এবং ফাইলগুলি ম্যাচ করুন))
  3. ফাইল বি চেহারাটিকে এমনভাবে তৈরি করুন যেন এটিতে কেবল দ্বিতীয় পরিবর্তন প্রয়োগ করা হয়। (উদাহরণস্বরূপ বাহ্যিক ডিফ সরঞ্জামটি আরম্ভ করুন এবং প্রথম পরিবর্তনটিকে পূর্বাবস্থায় ফিরিয়ে আনুন))
  4. "পর্যায়ক্রমে পরিবর্তনগুলি রাখুন" ব্যবহার করে একটি স্ট্যাশ তৈরি করুন।
  5. সমস্ত কিছু আনস্টেজ করুন
  6. সম্পন্ন!

2
git add .                           //stage all the files
git reset <pathToFileWillBeStashed> //unstage file which will be stashed
git stash                           //stash the file(s)
git reset .                         // unstage all staged files
git stash pop                       // unstash file(s)

1
ঠিক আছে, আপনার এটি করা উচিত নয়। উত্তর প্রশ্ন একটি সমাধান প্রদান করা উচিত। আপনি শুধু আপনার নিজের প্রশ্ন জিজ্ঞাসা করতে পারে।
এল_জে

এই সমাধানটি এই প্রশ্নের অন্যতম সহজ উত্তর। প্রশ্ন পড়ুন, সমস্ত উত্তর এবং আমার সাথে তুলনা করুন যদি আপনার যদি সন্দেহ থাকে যে এই উত্তরটি কোনও প্রযোজ্য সমাধান বা প্রশ্নের সম্পর্কে অপর্যাপ্ত তথ্য না দেয়, তবে আমরা আবার কথা বলতে পারি।
সেলিক্

এটি কার্যকর হবে না, কারণ তৃতীয় কমান্ড, "গিট স্ট্যাশ" স্টেজযুক্ত ফাইলগুলিকে সম্মান করবে না। মঞ্চযুক্ত এবং ননস্টেজ উভয় ফাইলই স্ট্যাশে যাবে। প্রশ্নগুলি বিশেষত জিজ্ঞাসা করে যে কীভাবে কেবলমাত্র একটি ফাইল স্ট্যাশ করতে হয়
সাইবারপ্রডজি

0

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

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

মূল প্রতিশ্রুতিতে পুনরায় সেট করুন তবে নতুন প্রতিশ্রুতি থেকে the_one_file চেকআউট করুন:

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

এখন আপনি_আপনি_ফাইলে স্ট্যাশ করতে পারেন:

git stash

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

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

হ্যাঁ, কিছুটা বিশ্রী ...


0

আমার যা প্রয়োজন তার কোনও উত্তর পাইনি এবং এটি এতটা সহজ:

git add -A
git reset HEAD fileThatYouWantToStash
git commit -m "committing all but one file"
git stash

এটি ঠিক একটি ফাইল স্ট্যাশ করে।


0

দ্রুত উত্তর


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

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

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

git checkout master -- battery_monitoring/msg_passing.py


0

আপনি কিছু পরিবর্তিত ফাইল স্ট্যাশ করতে চান, কেবল

আপনি যে ফাইলগুলি লুকিয়ে রাখার জন্য চাই না যোগ করুন, মধ্যে পর্যায় , এরপর চালানোgit stash save --keep-index

এটি সমস্ত স্টেস্ট না করা পরিবর্তিত ফাইলকে স্ট্যাশ করবে

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