GIT সর্বশেষ বিচ্ছিন্ন হেড পুনরুদ্ধার করুন


87

দয়া করে, আমার প্রকল্পে আমার একটি বড় সমস্যা রয়েছে: এটিই দৃশ্য। জিআইটির অধীনে আমার একটি এক্সকোড প্রকল্প রয়েছে। আজ আমি বুঝতে পেরেছিলাম যে শেষ প্রতিশ্রুতি কিছু পরীক্ষা ভঙ্গ করেছে, তাই আমি পূর্বের প্রতিশ্রুতিটি পরীক্ষা করে দেখলাম। আমি সোর্স ট্রি ব্যবহার করেছি এবং এটি হ'ল সতর্কতা

এটি করা আপনার কার্যকরী অনুলিপিটিকে 'বিচ্ছিন্ন হেড' করে তুলবে, যার অর্থ আপনি আর কোনও শাখায় থাকবেন না। আপনি যদি এর পরে প্রতিশ্রুতিবদ্ধ করতে চান তবে আপনি সম্ভবত হয় আবার একটি শাখা চেকআউট করতে বা একটি নতুন শাখা তৈরি করতে চাইবেন। এটা কি ঠিক আছে?

আমি একটি পুরো দিন কাজ করেছি এবং শেষে আমি সবকিছু প্রতিশ্রুতিবদ্ধ। সুতরাং আমার বিকাশকারী শাখায় আমার কাজটি মার্জ করা দরকার যাতে আমি বিকাশ শাখার চেকআউট করি এবং ... আমার কাজটি তাত্ক্ষণিকভাবে অদৃশ্য হয়ে যায় :(

আমি জানি যে আমার হেডকে আলাদা করা ভুল ছিল এবং সোর্সট্রি আমাকে সতর্ক করেছিল ... তবে আমার কাজটি পুনরুদ্ধার করার উপায় আছে কি?


খুব একই সমস্যা জন্য একটি সংশ্লিষ্ট থ্রেড এখানে কিভাবে ঘটে উপর পরিভাষা এখানে
আরবিটি

উত্তর:


259

আপনি যদি টাইপ করেন তবে git reflogএটি আপনাকে কী সংশোধনগুলির HEADদিকে ইঙ্গিত করেছে তার ইতিহাস প্রদর্শন করবে । আপনার বিচ্ছিন্ন মাথা সেখানে থাকা উচিত। আপনি তা খুঁজে পেতে একবার, না git checkout -b my-new-branch abc123বা git branch my-new-branch abc123(যেখানে abc123একটি নতুন শাখা তৈরি করতে রয়েছে SHA-1 বিচ্ছিন্ন মাথার হয়) আপনার বিচ্ছিন্ন মাথা থেকে পয়েন্ট। এখন আপনি আপনার অবসর সময়ে সেই শাখাটি মার্জ করতে পারেন।

সাধারণত, যদি আপনি কোনও বিচ্ছিন্ন মাথাতে কাজ করার পরে কোনও শাখা পরীক্ষা করেন, গিটকে আপনার আগে যে বিচ্ছিন্ন মাথা ছিল তা থেকে প্রতিশ্রুতি জানাতে হবে, যাতে আপনার প্রয়োজন হলে আপনি এটি পুনরুদ্ধার করতে পারেন। আমি কখনও সোর্স ট্রি ব্যবহার করি নি, সুতরাং আমি জানি না যে এটি সেই বার্তাটির সাথে সম্পর্কিত কিনা। তবে যদি এটি সেই বার্তাটি প্রদর্শন করে তবে আপনি সেই প্রতিশ্রুতি সন্ধান করতে আবার এটি ব্যবহার করতে git checkout -bবা git branchসেই প্রতিশ্রুতি থেকে একটি শাখা তৈরি করতে সক্ষম হবেন।


4
আপনাকে ধন্যবাদ ব্রায়ান আপনি আমার দিন বাঁচিয়েছেন।
মুজাম্মিল

ব্রায়ান, তুমি আমার লাইভ বাঁচিয়েছ! ধন্যবাদ !!
cldrr

আমি গিটে নতুন ... আমি পাচ্ছি fatal: A branch named 'mybranch' already exists.বিদ্যমান শাখায় কীভাবে যুক্ত করব?
রমেশ মুরুগেসান

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

4
এছাড়াও, যদি এটি কোনও একক প্রতিশ্রুতিবদ্ধ হয়ে গেছে যা সবেমাত্র অদৃশ্য হয়ে গেছে এবং আপনি এটি সেখানে খুঁজে পেয়েছেন তবে আপনি সেই ফিরিয়ে আনতে পারেন git cherry-pick e5b2f7b, সেখানে প্রতিশ্রুতি e5b2f7bদেওয়ার SHA-1 কোথায় ।
এইডিন

10

সোর্সট্রি-তে, আপনি জিইউআই ব্যবহার করে এটি করতে পারেন।

কমান্ড ইতিহাসে কোনও বার্তা সন্ধান করে প্রথমে "হারিয়ে যাওয়া" প্রতিশ্রুতিটি সন্ধান করুন (দেখুন: কমান্ড আউটপুট দেখান)। আপনি যে প্রতিশ্রুতিটি হারিয়েছিলেন তার পরে এটি সম্ভবত "স্যুইচিং শাখা" কমান্ডে থাকবে। এই বার্তায়, আশা করি আপনি 1234567 কমিট আইডির মাধ্যমে কমিট মন্তব্যটি দেখতে পাবেন।

সেই প্রতিশ্রুতি আইডিটি পরবর্তী পদক্ষেপে নিয়ে যান।

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

এখানে চিত্র বর্ণনা লিখুন


আসলে কাজ করে। কমিট আইডির মাধ্যমে আপনি সঠিক মন্তব্যটি দেখেছেন তা নিশ্চিত করুন।
হামাদ খান

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

5

আপনি যদি আলাদা হেডের পরিবর্তনগুলি রাখতে চান না এবং সর্বশেষ শাখায় যেতে চান তবে কমান্ডের নীচে সরাসরি কমান্ড ব্যবহার করুন।

git checkout - 

দ্রষ্টব্য: আমি বিচ্ছিন্ন হেডে আপনার সমস্ত পরিবর্তন মুছব।


ওপি তাদের কাজ চালিয়ে যাওয়ার অনুরোধ করেছিল। এটি মূল প্রশ্নের উত্তর দেয় না। কেবল একটি শাখায় রাখার বিকল্পটি যুক্ত করা এই উত্তরটিকে দরকারী করে তুলবে।
ম্যানুয়েলভিগার্চিয়া

1

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

reflogকমান্ডের জন্য ধন্যবাদ আমরা দেখতে পেলাম যে পরিবর্তনগুলি হারিয়ে গেছে। তবে আমাদের ক্ষেত্রে, git branchপ্রত্যাশার মতো কাজ করেনি ... বা আগত git pullকোনওরকমভাবে গোলমাল করে। আমাদের রিফ্লোগ থেকে সদ্য নির্মিত শাখায় পরিবর্তনগুলি দেখতে হয়েছিল:

 git cherry-pick 0b823d42..3cce27fc

যা আমাদের শাখায় চেয়েছিল সমস্ত কমিট স্থাপন করেছিল। তারপরে আমরা developকোনও সমস্যা ছাড়াই শাখাটি মার্জ করতে পারি ।

যদি এই কেউ জন্য তথ্যপূর্ণ, আমরা করে উপর চিহ্নিত হয়নি বিচ্ছিন্ন মাথা মধ্যে reflogমধ্যে "চেকআউট" দিয়ে চিহ্নিত ঐ দিকে তাকিয়ে (যা শাখা নাড়াচাড়া চিহ্নিত):

e09f183b HEAD@{3}: pull: Fast-forward
b5bf3e1d HEAD@{4}: checkout: moving from lost_changes to develop
b5bf3e1d HEAD@{5}: checkout: moving from 3cce27fca50177a288df0252f02edd5da5ee64fd to lost_changes
3cce27fc HEAD@{6}: commit: add statistics
417a99a4 HEAD@{7}: commit: add test
0b823d42 HEAD@{8}: commit: new utility class
d9ea8a63 HEAD@{9}: checkout: moving from develop to d9ea8a635d4c2349fcb05b3339a6d7fad5ae2a09
b5bf3e1d HEAD@{10}: pull: Fast-forward

আমরা যা চেয়েছিলাম তারা HEAD@{8}ছিল HEAD@{6}(উভয়ই অন্তর্ভুক্ত)। সুতরাং আমরা তাদের দ্বারা পেয়েছি:

git cherry-pick 0b823d42..3cce27fc

তারপরে স্বাভাবিক সংশ্লেষ সমাধান এবং চূড়ান্ত প্রতিশ্রুতিবদ্ধতা আমাদের হারিয়ে যাওয়া শাখা-প্রশাখাগুলি বিশৃঙ্খলাবদ্ধ করে ফেলেছিল we এটিকে বিকাশে মার্জ করা দ্রুতগতিতে এগিয়ে ছিল forward


0

আমি এই দৃশ্যটি চেষ্টা করে দেখেছি এবং এই গিটটি আমাকে শেষ প্রতিশ্রুতি দেওয়ার SHA-1 বলছে:

vors@localhost:~/git-test$ git checkout master 
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  ec600e6 333

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch new_branch_name ec600e6eb2473dd4f3732539c5c1fa5829f631b7

Switched to branch 'master'

আপনি এই বার্তাটি দেখেছেন?


না অথবা আমি মনোযোগ দিচ্ছি না আমি টাইমম্যাশনে ব্যাকআপ খুঁজছি; (
IgnazioC

4
@ IgnazioC আপনার ব্যাকআপটি দেখার দরকার নেই। আপনি কি আমার উত্তরটি একবার দেখেছেন? git reflogআপনার যা প্রয়োজন তা আপনাকে দেখাতে হবে।
ব্রায়ান ক্যাম্পবেল

0

বিচ্ছিন্ন মাথা যতক্ষণ না আপনি পরিবর্তন করতে চান ঠিক আছে।

আপনি যদি কোন প্রতিশ্রুতি ফিরিয়ে নিতে চান তবে আপনি নির্দিষ্ট শাখায় গিট রিভার্ট ব্যবহার করতে পারেন

যদি আপনি বিচ্ছিন্ন মাথা থেকে কাজ করতে চান এবং কমিট করেন; একটি নতুন শাখা তৈরি করুন (এবং পরে এটি মার্জ করুন);


হ্যাঁ! আমরা বিধি জানি। কিন্তু যখন সহকর্মীরা বিচ্ছিন্ন মাথা থেকে কাজ করে এবং তারপরে সেই প্রতিশ্রুতিগুলি বন্ধ করে দেয়, তখন তারা বিধি বলে নয়, উত্তর চায়।
ম্যানুয়েলভিগার্চিয়া

0
  1. প্রথমে git reflogইতিহাস দেখার জন্য দৌড়াও ।
  2. প্রাচীনতম রিভিশনটি তালিকার সর্বশেষটি হবে।
  3. git checkout -b temp e35d2b3E35dd23 ব্যবহার করে আপনার কাঙ্ক্ষিত প্রতিশ্রুতিতে স্যুইচ করুন আপনার প্রতিশ্রুতিটির হ্যাশ মান।
  4. এটাই. এখন শুধু গিট অ্যাড করুন। ইত্যাদি ....

এটি যদি আপনার সমস্যার সমাধান করে তবে এটি একটি উত্তর হিসাবে গ্রহণ করুন। অন্যথায় আপনার মন্তব্য শেয়ার করুন।

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