স্থানীয় পরিবর্তনগুলি অস্বীকার না করে গিট স্যুইচ শাখা


181

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

কীভাবে আমরা স্থানীয় পরিবর্তনগুলি বর্জন না করে গিটকে শাখা পরিবর্তন করতে বাধ্য করতে পারি ।

আমি একটি উত্তর অপেক্ষা করার সময় আমি সম্ভবত একটি নির্বোধ উপায়ে এটি সম্পর্কে যাচ্ছি, তবে আমি জানতে চাই যে একটি সঠিক পদ্ধতি আছে কিনা আমি মিথ্যা বলব যদি আমি বলতাম যে এটি আমার সাথে আগে ঘটেছিল না ...

  • ব্যাকআপ পরিবর্তন রেপো
  • git reset --hard
  • git checkout right-branch
  • পরিবর্তনগুলি পুনরুদ্ধার করুন
  • git commit -m "changes"

উত্তর:


342

আপনি কতটা দূরে এবং কোন শাখা (গুলি) এর উপর আপনি চান তার উপর নির্ভর করে বিভিন্ন উপায়ে একটি গুচ্ছ রয়েছে।

আসুন একটি ক্লাসিক ভুল করা যাক:

$ git checkout master
... pause for coffee, etc ...
... return, edit a bunch of stuff, then: oops, wanted to be on develop

সুতরাং এখন আপনি এই পরিবর্তনগুলি চান, যা আপনি এখনও প্রতিশ্রুতিবদ্ধ হন নি master, চালিয়ে যাওয়া উচিত develop

  1. আপনি যদি না থাকে একটি developএখনো, পদ্ধতি তুচ্ছ হল:

    $ git checkout -b develop
    

    এটি developএখন আপনি যেখানেই থাকুন না কেন থেকে শুরু করে একটি নতুন শাখা তৈরি করে । এখন আপনি প্রতিশ্রুতিবদ্ধ করতে পারেন এবং নতুন স্টাফ সব চলছে develop

  2. আপনি আছে একটি develop। দেখুন গিট আপনাকে কিছু না করেই স্যুইচ করতে দেয় কিনা:

    $ git checkout develop
    

    এটি হয় সফল হবে, বা অভিযোগ করবে। যদি এটি সফল হয়, দুর্দান্ত! শুধু প্রতিশ্রুতিবদ্ধ। (না হলে error: Your local changes to the following files would be overwritten ...), আপনার কাছে এখনও প্রচুর বিকল্প রয়েছে।

    সহজতমটি সম্ভবত git stash(অন্য সমস্ত উত্তর-এর হিসাবে যা আমাকে ক্লিক করে postবলেছে) beat চালান git stash saveবা git stash push, 1 বা কেবল প্লেইন git stashযা save/ push:

    $ git stash
    

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

    $ git checkout develop
    Switched to branch 'develop'
    $ git stash apply
    

    যদি সবকিছু ঠিকঠাক হয় এবং আপনি ফলাফলগুলি পছন্দ করেন তবে আপনার উচিত git stash dropস্ট্যাশ। এটি অদ্ভুত নন-ব্রাঞ্চ-ওয়াই কমিটের রেফারেন্স মুছে দেয়। (তারা এখনও সংগ্রহশালায় রয়েছে, এবং কখনও কখনও জরুরী অবস্থায় পুনরুদ্ধার করা যায় তবে বেশিরভাগ উদ্দেশ্যে, আপনি সেগুলিকে সেই মুহুর্তে বিবেচনা করা উচিত))

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

অনেকে ব্যবহার করেন git stash popযা স্বল্প হাতে রয়েছে git stash apply && git stash drop। এটি যতদূর যায় ঠিক আছে, তবে এর অর্থ হ'ল যদি অ্যাপ্লিকেশনটির কোনও গোলমাল ঘটে এবং আপনি সিদ্ধান্ত নেন যে আপনি এই পথে এগিয়ে যেতে চান না, আপনি সহজেই স্ট্যাশ ফিরে পেতে পারবেন না। আমি সন্তুষ্ট হলেই আমি পৃথক apply, ফলাফল পরিদর্শন করার পরামর্শ দিই drop। (এটি অবশ্যই অন্য একটি বিন্দু প্রবর্তন করে যেখানে আপনি অন্য কফি বিরতি নিতে পারেন এবং আপনি যা করছেন তা ভুলে যেতে পারেন, ফিরে আসুন এবং ভুল কাজটি করতে পারেন, তাই এটি কোনও নিখুঁত নিরাময় নয়))


1save মধ্যে git stash saveএকটি নতুন লুকোবার জায়গা তৈরি করার জন্য পুরাতন ক্রিয়া। গিট সংস্করণ 2.13 জিনিসগুলি আরও সুসংগত popকরতে এবং ক্রমান্ড কমান্ডে আরও বিকল্প যুক্ত করতে নতুন ক্রিয়াটি প্রবর্তন করেছে । গিট সংস্করণ ২.১। আনুষ্ঠানিকভাবে পুরানো ক্রিয়াটি অবমূল্যায়ন করেছে (যদিও এটি এখনও গিট ২.২৩ এ কাজ করে, এটি আমি সম্পাদনা করার সময় সর্বশেষতম প্রকাশ)।


3
যদি আমি বর্তমান শাখায় প্রতিশ্রুতি না দিয়ে অন্য শাখায় স্যুইচ করতে চাই (উদাহরণস্বরূপ পরিবর্তনগুলি সমাপ্ত হয় না) এবং পরে চালিয়ে যেতে ফিরে যেতে চাই তবে কী হবে?
stt106

@ stt106: আপনি এখনও সংরক্ষণ করা আবশ্যক, কিন্তু আপনি মাধ্যমে এটি এবং অন্যান্য উত্তর যেমন করতে পারেন, git stashযাতে করে-জন্য git stash, আপনি পেতে দুই লুকোবার জায়গা এন্ট্রি প্রতি করে, একটি অস্বাভাবিক উপর ব্যবস্থা-হয় কোন শাখা। খুব স্বল্পমেয়াদী বিশেষ কেস বাদে আমি সাধারণত একটি সাধারণ প্রতিশ্রুতিবদ্ধতা পছন্দ করি। আপনি যখন git reset --softবা সেই শাখায় কাজ করতে ফিরে আসবেন তখন আপনি বা git reset --mixedপরে, বা git commit --amendএটিকে সরিয়ে দিতে ব্যবহার করতে পারেন । (আধুনিক গীটে, আপনি এটিও ব্যবহার করতে পারেন git worktree add, এটি একটি আরও উন্নত সমাধান হতে পারে))
টেরিক

"এটি হয় সফল হবে, বা অভিযোগ করবে"। চেকআউট করার সময় কোনটি সাফল্য বা ত্রুটির কারণ হতে পারে?
ন্যানোকভি

1
@nanocv: দেখুন stackoverflow.com/questions/22053757/...
torek

আমি <a> শাখায় থাকা উপরের পদক্ষেপগুলির সাথে স্যুইচ করার সময় আমার সমস্ত স্থানীয় পরিবর্তনগুলি হারিয়ে যাচ্ছে এবং আমার পরিবর্তনগুলি করছি এবং আমি <b> শাখায় যেতে চান এবং আমার সমস্ত পরিবর্তনগুলিকে এতে চাপ দিতে চাই। যখন আমি গিট স্ট্যাশ করছি এবং অন্যান্য শাখায় চলে যাচ্ছি তখন এটি <b> শাখার সমস্ত ফাইল টানছে এবং আমার স্থানীয় পরিবর্তনগুলি হারিয়ে যাচ্ছে
মুকুল মুঞ্জাল

38

গিট স্ট্যাশ ব্যবহার করুন

git stash

এটি স্ট্যাকের পরিবর্তনগুলিকে ঠেলে দেয়। আপনি যখন তাদের ফিরে টানতে চান ব্যবহার করুন

 git stash apply

এমনকি আপনি স্বতন্ত্র আইটেমগুলি টেনে আনতে পারেন। স্ট্যাশ সম্পূর্ণরূপে উড়িয়ে দিতে:

 git stash clear

7
শেষ আদেশ সম্ভবত হতে হবে git stash drop; git stash clearকমান্ডের এই সেটটিতে সম্ভবত সম্পর্কিত নয় এমন স্ট্যাশ সহ পুরো স্ট্যাশ স্ট্যাকটি মুছে ফেলবে।
লেল্যান্ড

15
  • git stash আপনার আপত্তিজনক পরিবর্তনগুলি সংরক্ষণ করুন
  • git stash list আপনার সংরক্ষিত অনাকাঙ্ক্ষিত স্ট্যাশগুলির তালিকা তৈরি করতে
  • git stash apply stash@{x} যেখানে আপনার তৈরি করা স্ট্যাশগুলির মধ্যে x 0,1,2.. হতে পারে

4

অপরপক্ষে তুমি :

  • git stashআপনার পরিবর্তনগুলি তাক লাগাতে ব্যবহার করুন বা,

  • অন্য একটি শাখা তৈরি করুন এবং সেখানে আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করুন এবং তারপরে সেই শাখাটিকে আপনার কার্যক্ষম ডিরেক্টরিতে মার্জ করুন merge

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