অস্থায়ীভাবে একটি নির্দিষ্ট গিট কমিটে কাজের অনুলিপিটি স্যুইচ করুন


248

এর পরে করা সমস্ত কমিট না হারিয়ে কীভাবে নির্দিষ্ট গিট কমিটে স্যুইচ করবেন ?

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

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

পুরো প্রকল্পের ফোল্ডারটি জিপ না করে কীভাবে এটি করবেন?


উত্তর:


344

আপনি যদি একটি নির্দিষ্ট শাখায় থাকেন তবে mybranchকেবল এগিয়ে যান এবং git checkout commit_hash। তারপরে আপনি নিজের শাখায় ফিরে আসতে পারেন git checkout mybranch। আমি আজ একটি বাগ দ্বিখণ্ডিত একই খেলা ছিল :) এছাড়াও, আপনি গিট বাইসেক্ট সম্পর্কে জানতে হবে ।


6
দ্রষ্টব্য আপনি যদি কেবল git checkout commit_hashএকটি পরিষ্কার সংগ্রহস্থলে থাকেন এবং ব্রাঞ্চিংয়ের দরকার না হয় আপনি কেবল তা করতে পারেন। কিছু ব্যবহারের ক্ষেত্রে (যেমন আমার) সহজ হতে পারে।
এন্ডারল্যান্ড

@ জেনারল্যান্ড: আপনার হেড সর্বদা কোনও শাখায় নির্দেশ করে, সাধারণত :)
আলেকজান্ডার পাভলভ

আমার একটি সমস্যা হয়েছিল যেখানে আমাকে পুরো কমিট হ্যাশটি ব্যবহার করতে হয়েছিল কারণ একটি আংশিকটি গ্রহণ করা হয়নি।
পরাশক্তি

6
git bisectরেফারেন্সের জন্য উত্সাহ দেওয়া ; কি একটি অত্যন্ত দরকারী সরঞ্জাম!
নাইক

54

প্রথমে git logলগটি দেখতে ব্যবহার করুন , আপনি যে প্রতিশ্রুতিবদ্ধ তা চয়ন করুন, কমিট শনাক্ত করতে ব্যবহৃত শে 1 হ্যাশটি নোট করুন। পরবর্তী, চালান git checkout hash। আপনার কাজ শেষ হওয়ার পরে git checkout original_branch,। এতে হেড না সরানোর সুবিধা রয়েছে, এটি কেবল কার্যকরী অনুলিপি একটি নির্দিষ্ট প্রতিশ্রুতিতে স্যুইচ করে।


4
আমার মনে হয় তুমি বোঝাতে চাইছ git checkout <original_branch>git checkout HEADকার্যকরভাবে একটি NOOP
অ্যাবে

3
git reset --hard <hash>বর্তমান শাখার শিরোনাম পরিবর্তন করে, যখন আপনার সাথে git checkout <hash>একটি বিচ্ছিন্ন চেকআউট হয় যা কোনও শাখা পরিবর্তন করে না এবং আপনি এই শাখার মূল হ্যাশ আইডি না জেনে সহজেই ফিরে যেতে পারেন যা এই উত্তরে দেখানো হয়েছে।
জোফেল

@ ফেমারেফ বিগিনিয়ার প্রশ্ন: এই প্রশ্নের প্রসঙ্গে (সাময়িকভাবে কোনও পূর্বের প্রতিশ্রুতিতে স্যুইচ করুন), কেন হেডকে সরানো বা না সরানো সুবিধা বা অসুবিধা হবে?
বাদামি ন্যাটি

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

15

এখানে অন্যান্য উত্তরের পাশাপাশি আপনাকে git checkout <the-hash-you-want>যেখানে আপনি যেখানে ব্যবহার করছেন সেখানে ফিরে যেতে পারেন তা জেনে রাখার মূল্য কী তা দেখানো হচ্ছে :

git checkout @{-1}

এটি প্রায়শই এর চেয়ে বেশি সুবিধাজনক:

git checkout what-was-that-original-branch-called-again-question-mark

যেমনটি আপনি অনুমান git checkout @{-2}করতে পারেন, আপনাকে আবার দু'বছর git checkoutআগে যে শাখায় ছিলেন সেখানে ফিরিয়ে নিয়ে যাবেন এবং একইভাবে অন্যান্য সংখ্যার জন্যও। আপনি যদি মনে করতে পারেন যে আপনি কোথায় ছিলেন আরও বড় সংখ্যার জন্য, আপনার জন্য এটির জন্য এক ধরণের পদক পাওয়া উচিত।


দুর্ভাগ্যক্রমে উত্পাদনশীলতার জন্য, git checkout @{1}আপনাকে ভবিষ্যতে যে শাখায় থাকবে সেগুলিতে নিয়ে যায় না, যা লজ্জাজনক।


1
দ্রষ্টব্য git checkout -এটির জন্য একটি শর্টহ্যান্ড ওরফেgit checkout @{-1}
নাথানেল

@ নাথনেল ওএমজিওড , কোনও উপায় নেই ... এটি সবকিছু পরিবর্তন করে! সুন্দর ধন্যবাদ আপনাকে! … আমি উত্তরে এটি অন্তর্ভুক্ত করতে যাচ্ছিলাম, তবে আমি মনে করি এটি সাধারণ @{n}বাক্য গঠন সম্পর্কে জানার জন্যও দরকারী , কারণ এটি প্রচুর গিট কমান্ডের সাথে কাজ করে। উত্তরটি বিভ্রান্ত না করে আপনার শর্টহ্যান্ড যুক্ত করা আমার পক্ষে কঠিন মনে হয়েছে found পরিবর্তে আমি আপনার মন্তব্যটি দিয়েছি - আমি আশা করি লোকেরা এটি দেখতে পাবে। আবার ধন্যবাদ.
বেঞ্জোহন

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