গিট-স্ট্যাশ বনাম গিট-শাখা


92

একটি পূর্ববর্তী গীত প্রশ্ন , ড্যানিয়েল Benamy গীত একটি কর্মপ্রবাহ সম্পর্কে কথা বলা হয়েছিল:

আমি মাস্টারের উপর কাজ করছিলাম এবং কিছু জিনিস প্রতিশ্রুতিবদ্ধ ছিলাম এবং তারপরে সিদ্ধান্ত নিয়েছিলাম যে আমি সেই কাজটি আটকে রাখতে চাই। আমি কয়েকটা কমিটিকে ব্যাক আপ দিয়েছিলাম এবং তারপরে আমি আমার বকাবলের কাজ শুরু করার আগে থেকেই ব্রাঞ্চ করেছিলাম।

তিনি তার বর্তমান পরিবর্তনগুলি হারাতে না করে সময়ের সাথে তার কার্যক্ষম অবস্থাকে পূর্বের পর্যায়ে পুনরুদ্ধার করতে চেয়েছিলেন। উত্তরগুলির সমস্তগুলি বিভিন্ন দিক থেকে ঘুরে

git branch -m master crap_work
git branch -m previous_master master

এর সাথে কীভাবে তুলনা করা যায় git stash? আমি এখানে কিছুটা বিভ্রান্ত হয়ে যাচ্ছি দেখে মনে হচ্ছে যে এখানে আলাদা ব্যবহারের কেসটি যখন মনে হয় সবকিছুই git stashইতিমধ্যে শাখা দ্বারা পরিচালিত হয়েছে…


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

উত্তর:


109

'স্ট্যাশ' আপনার কাজের অনুলিপিতে অনির্দিষ্ট, " নোংরা " জিনিসগুলি নিয়ে যায় এবং এটিকে স্ট্যাশ করে দেয়, আপনাকে একটি পরিষ্কার কাজের অনুলিপি দিয়ে রেখে যায়।

এটি আসলেই শাখা করে না। তারপরে আপনি স্ট্যাশ অন্য কোনও শাখার উপরে প্রয়োগ করতে পারেন। বা, গিট 1.6 হিসাবে, আপনি এটি করতে পারেন:

git stash branch <branchname> [<stash>]

একটি নতুন শাখার উপরে স্ট্যাশ প্রয়োগ করতে, সমস্ত কমান্ডেই।

সুতরাং, স্ট্যাশ দুর্দান্ত কাজ করে যদি আপনি এখনও " ভুল " শাখায় প্রতিশ্রুতিবদ্ধ না হন ।

যদি আপনি ইতিমধ্যে প্রতিশ্রুতিবদ্ধ থাকেন, তবে আপনার প্রশ্নে যে ওয়ার্কফ্লোটি আপনি বর্ণনা করেছেন এটি একটি ভাল বিকল্প। এবং যাইহোক, আপনি ঠিক বলেছেন: গিট খুব নমনীয় এবং সেই নমনীয়তার সাথে ওভারল্যাপিং কার্যকারিতা আসে।


4
একটি জিনিস যা আমাকে কামড়ায় ... আপনি কি লিখতে পারেন যে [[<স্ট্যাশ>] আসলে কেমন লাগে! তারা এটিকে দস্তাবেজের মধ্যে স্বরলিপিটিতে রেখেছিল তবে এটি 1 বা @ {1} বা কী হওয়া উচিত তা স্পষ্ট নয়।
গ্রেগ লিন্ড

4
আপনি যদি কোনও নির্দিষ্ট স্ট্যাশ "এন" উল্লেখ করতে চান তবে স্ট্যাশ @ {N use ব্যবহার করুন
জর্ডি বনস্টার

9
git stash listআপনার স্ট্যাশগুলির নামগুলি দেখুন ।
ইডব্রি

6
গ্রেগ, হ্যাঁ আপনি পারবেন: গিট স্ট্যাশ সেভ (আপনার স্ট্যাশের নাম)। আপনি যদি এটি ব্যবহার করেন তবে এটি আরও কার্যকর করে তোলে যাতে প্রতিটি স্ট্যাশ কী করে তা আপনি জানতে পারেন। আপনি স্ট্যাশের প্যাচটি দেখানোর জন্য গিট স্ট্যাশ শো -p (নাম) ব্যবহার করতে পারেন।
টমাস ভ্যান্ডার স্টিচিল

7
এছাড়াও, git stash show -uকাজের অনুলিপি বিরুদ্ধে স্ট্যাশ একটি পৃথক প্রদর্শন।
কেন

49

আপনি যখন আপনার স্ট্যাশ পুনরুদ্ধার করবেন, আপনার পরিবর্তনগুলি আবার প্রয়োগ করা হবে এবং আপনি আপনার কোডে কাজ চালিয়ে যাবেন।

আপনার বর্তমান পরিবর্তনগুলি স্থির করতে

$ git stash save 
Saved "WIP on master: e71813e..."

আপনার একাধিক স্ট্যাশও থাকতে পারে। স্ট্যাশ স্ট্যাকের মতো কাজ করে। প্রতিবার আপনি যখন কোনও নতুন স্ট্যাশ সংরক্ষণ করবেন, তখন এটি স্ট্যাকের উপরে রাখবেন।

$ git stash list
stash@{0}: WIP on master: e71813e..."

stash@{0}অংশটি নোট করুন ? এটি আপনার স্ট্যাশ আইডি এটি পরে পুনরুদ্ধার করার জন্য আপনার এটির প্রয়োজন হবে। এখনই এটি করা যাক। আপনার করা প্রতিটি স্ট্যাশের সাথে স্ট্যাশ আইডি পরিবর্তন হয়। স্ট্যাশ @ {0} আপনার করা শেষ স্ট্যাশ বোঝায়।

স্ট্যাশ প্রয়োগ করতে

$ git stash apply stash@{0}

আপনি স্ট্যাশ প্রয়োগ করার পরেও তা দেখতে পাচ্ছেন। আপনার আর প্রয়োজন না হলে আপনি এটিকে ফেলে দিতে পারেন।

$ git stash drop stash@{0}

বা, কারণ স্ট্যাশ স্ট্যাকের মতো কাজ করে, আপনি সংরক্ষণ করা শেষ স্ট্যাশটি পপ করতে পারেন:

$ git stash pop

আপনি যদি নিজের সমস্ত স্ট্যাশে মুছে ফেলতে চান তবে 'ক্লিয়ার' কমান্ডটি চালান:

$ git stash clear

এটি খুব ভাল হতে পারে যে আপনি প্রায়শই স্ট্যাশ ব্যবহার করেন না। আপনি যদি আপনার পরিবর্তনগুলি পরে পুনরুদ্ধার করতে কেবল দ্রুত স্ট্যাশ করতে চান তবে আপনি স্ট্যাশ আইডিটি ছেড়ে দিতে পারেন।

$ git stash
...
$ git stash pop

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

আমার ব্লগে পোস্ট করা এর আরও গভীরতর সংস্করণও রয়েছে


অনুমিত 'সেরা' উত্তরের চেয়ে অনেক বেশি সহায়ক সংস্থান ... (যদিও সেরা উত্তরটি এটিকে অনেক স্পষ্ট করে
তুলেছিল

9

আমি সবসময় গিট স্ট্যাশ থেকে সতর্ক থাকি। যদি আপনি কয়েকবার স্ট্যাশ করেন তবে জিনিসগুলি অগোছালো হয়ে যায়। গিট স্ট্যাশ তালিকা আপনার তৈরি করা স্ট্যাশগুলির একটি সংখ্যক তালিকা প্রদর্শন করবে, যদি আপনি তাদের সরবরাহ করেন তবে বার্তাটি ... তবে সমস্যাটি সত্য যে আপনি একটি স্ট্র্যাশগুলি একটি নির্মম গিট স্ট্যাশ পরিষ্কার ছাড়াই (যা সবগুলি মুছে ফেলে) বাদ দিয়ে পরিষ্কার করতে পারবেন না in । সুতরাং আপনি যদি সর্বদা আপনার স্ট্যাশগুলির জন্য অতি-বর্ণনামূলক বার্তা দেওয়ার ক্ষেত্রে মলদ্বার না হন (কিন্ডা স্ট্যাশ-এর ​​দর্শনের বিরুদ্ধে যায়), আপনি স্ট্যাশগুলির একটি অজানা সংখ্যার সমাপ্তি শেষ করবেন।

গিটক ব্যবহার করা কোনটি - কোনটি স্ট্যাশগুলি স্পট করে তা চিহ্নিত করার একমাত্র উপায় know কমপক্ষে এটি আপনাকে স্ট্যাশ কী তৈরি হয়েছিল তা প্রতিশ্রুতি দেওয়ার পাশাপাশি সেই স্ট্যাশের অন্তর্ভুক্ত সমস্ত কিছুর ভিন্নতা দেয়।

নোট করুন যে আমি 1.5.1.3.3 গিট ব্যবহার করছি এবং আমার মনে হয় 1.6 গিট স্ট্যাশ পপ যুক্ত করেছে, যা আমার ধারণা যে নির্বাচিত স্ট্যাশ প্রয়োগ করবে এবং এটি তালিকা থেকে সরিয়ে ফেলবে। যা অনেক ক্লিনার মনে হচ্ছে।

আপাতত, আমি সর্বদা শাখা দেওয়ার চেষ্টা করি যদি না আমি একেবারে ইতিবাচক হয় তবে আমি একই দিনে এমনকি সেই সময়ের মধ্যেই ফিরে আসব, এমনকি এক ঘন্টার মধ্যেও।


4
আপনি তাদের দরকারী নাম না দিয়ে শাখা তৈরি করেন? যদি তা না হয় তবে কেন আপনি স্ট্যাশ দিয়ে একই কাজ করেন না তা আমি দেখতে পাচ্ছি না। যদি আপনি সত্যিই সেগুলির মধ্যে কী থাকতে চান তা জানতে চান, কোন ফাইলটি পরিবর্তিত হয়েছে তা দেখানোর জন্য আপনি গিট-স্ট্যাশ শো ব্যবহার করেন বা প্রকৃত পার্থক্যগুলি দেখতে গিট-স্ট্যাশ প্রয়োগ এবং গিট-ডিফ রয়েছে। স্ট্যাশগুলি ছাঁটাই করে রাখা আপনার শাখাগুলি নিয়ন্ত্রণে রাখার মতোই।
জিয়াং চিয়ামিয়াভ

18
প্রকৃতপক্ষে, আপনি একক স্ট্যাশ মুছে ফেলতে পারেনgit stash drop [<stash>]
কুমারহর্স

4
সত্য, গিটের দীর্ঘকাল ধরে গিট স্ট্যাশ ড্রপ ছিল। এটি এখন পিটা ব্যবহার করার চেয়ে অনেক কম। আমি এটি প্রতিদিন এবং এমনকি দীর্ঘ সময় ধরে ব্যবহার করি।
ওয়েবম্যাট

3

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

এর থেকে মূল পার্থক্য git stash:

  • git stashনোংরা গিট অবস্থা সরুভাবে সংরক্ষণ করে (সংশোধিত ফাইল এবং সূচীতে ফাইল যুক্ত করা হয়েছে), যেখানে এটির চেয়ে পৃথক সমস্ত কিছুgit-bottle সংরক্ষণের জন্য ডিজাইন করা হয়েছে এবং এটি সংশোধিত, সংশোধিত এবং যোগ না করা, যোগ করা হয়নি, নিমজ্জিত পথগুলির মধ্যে সংরক্ষণের উপায়ে আলাদা করে তোলে, এবং সম্পূর্ণ রিবেস / মার্জ রাজ্যসমূহ (কেবলমাত্র এর অধীনে পাথগুলি সংরক্ষণ করা হয় না)।HEAD.gitignore
  • git stashআপনার পৃথকভাবে ট্র্যাক রাখতে হবে এমন বস্তুগুলিকে স্ট্যাশ করে সংরক্ষণ করুন আমি যদি 2 সপ্তাহ আগে কোনও স্থির করে রাখি তবে আমি সম্ভবত এটি মনে করতে পারি না, যেখানে বর্তমান শাখায় অস্থায়ী প্রতিশ্রুতিবদ্ধgit-bottle হিসাবে সংরক্ষণ করা হয় । বিপরীত ক্রিয়াটি যা পপের সমতুল্য । এই কমিটগুলি পুস্তকাগুলির মধ্যে ভাগ করে নেওয়া এবং ভাগ করা সম্ভব। এটি দূরবর্তী বিল্ডগুলির জন্য দরকারী হতে পারে, যেখানে আপনার কেবলমাত্র বিল্ডিংয়ের জন্য, বা সংঘাতের সমাধানের জন্য অন্য ব্যক্তির সাথে সহযোগিতা করার জন্য একটি রিমোট সার্ভারে অন্য একটি সংগ্রহস্থল রয়েছে।git-unbottlegit stash
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.