গেটে "কোনও শাখা নেই" থেকে ফাইলগুলি উদ্ধার করে এবং কমিট করে


11

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

এই ফাইলগুলিতে দুর্ঘটনাক্রমে আমি কিছু পরিবর্তন করেছি এখন আমি বুঝতে পেরেছি যে আমি আমার প্রকল্পের একটি "শাখা নেই", সাবমডিউলে কাজ করছি।

আমি কীভাবে এই ফাইলগুলিকে একটি শাখায় প্রবেশ করতে পারি (মাস্টারের মতো) যাতে আমি তাদের উদ্ধার করতে পারি?

উত্তর:


28

আপনি git reflog"হারিয়ে যাওয়া" কমিটগুলি সন্ধান করতে ব্যবহার করতে পারেন :

$ cd submodule_dir
$ git reflog          # Find the commit
$ git checkout master
$ git cherry-pick $SHA_OF_MISSING_CMMIT

হ্যাঁ, এটি দুর্দান্ত কাজ করেছে! আমি git merge $COMMIT_SHAএকবার না করে বাদে অন্য শাখায় ছিলাম।
জিওনক্রস

3

"কোন শাখা" রাষ্ট্রকে বিচ্ছিন্ন হেড বলা হয়। এটিকে বলা হয় কারণ হেড রেফ কোনও শাখার সাথে সংযুক্ত থাকে না, পরিবর্তে এটি কোনও প্রতিশ্রুতিতে সরাসরি নির্দেশ করে। একটি হেডকে একটি শাখায় সংযুক্ত করতে যা বর্তমান হেডের কমিটকে নির্দেশ করে, ব্যবহার করুন git checkout -b branchname

এই ক্রমের সাথে হেডে কমিটগুলি অন্তর্ভুক্ত করার জন্য আপনি একটি বিদ্যমান শাখাটি নিরাপদে আপডেট করতে পারেন:

git branch temp
git checkout branchname
git merge temp
git branch -d temp

অথবা, সমতুল্যভাবে, HEAD@{1}অস্থায়ী শাখা তৈরি করা এড়াতে রিফ্লগ স্বরলিপি ব্যবহার করে :

git checkout branchname
git merge HEAD@{1}

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

যদি আপনি বাধ্যতামূলকভাবে একটি বিদ্যমান শাখা ওভাররাইট করতে চান তবে হেডের প্রতিশ্রুতিতে নির্দেশ করতে আপনি ব্যবহার করতে পারেন git branch -f branchname && git checkout branchname। মাথায় কমিট তাহলে বর্তমান ডগা উপর ভিত্তি করে করা হয় না branchname এই একটি অ-ফাস্ট-ফরোয়ার্ড পরিবর্তন পরিণাম ডেকে আনবে branchname যা আপনি সাধারণত এড়াতে চান (এটা rewriting ইতিহাস হিসেবে দেখা হয় না)।


এই জবাবটি নোট করুন ধরে নিলেন যে হেড এখনও একটি শাখা-অন-শাখার প্রতি সর্বশেষ কমিটের দিকে ইঙ্গিত করছে। আপনি যদি সেই থেকে এখন পর্যন্ত প্রধানকে স্থানান্তরিত করে থাকেন এবং কেবল এখন কী ঘটেছিল তা বুঝতে পেরেছিলেন, আপনাকে রিফ্লগে সেই হারানো প্রতিশ্রুতিটি অনুসন্ধানের প্রয়োজন হতে পারে (মিপাদির উত্তর দেখুন)।
লার্স

1

পূর্ববর্তী উত্তরগুলি যুক্ত করতে:

আপনি এখনও বিচ্ছিন্ন হেডে থাকাকালীন আপনি একটি ট্যাগ যুক্ত করতে পারেন:

git tag <some-tag>

এটি প্রতিশ্রুতিতে একটি ট্যাগ যুক্ত করবে , যা এতে gitkএবং অন্যান্য সরঞ্জামগুলিতে দৃশ্যমান হবে ।

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