গিটে মুছে ফেলার পরে আমি কি কোনও শাখা পুনরুদ্ধার করতে পারি?


1064

আমি যদি দৌড়ে যাই git branch -d XYZতবে শাখাটি পুনরুদ্ধার করার কোনও উপায় আছে? ফিরে যাওয়ার কোনও উপায় কি যেন আমি মুছা শাখা কমান্ডটি চালাচ্ছি না?


4
গৃহীত উত্তর সম্পর্কে একটি দারুণ এক নোট যা শাখাটি উত্পন্নরূপে মুছে ফেলা হলেও এটি কাজ করে! আমি সবেমাত্র বেশ কয়েকটি শাখা পুনরুদ্ধার করেছি যা এগুলি ঘটনাক্রমে উত্স অনুসারে মুছে ফেলার পরে স্থানীয়ভাবে আমার আর নেই।
theblang

উত্তর:


1953

হ্যাঁ, git reflogআপনার মুছে ফেলা শাখার ডগায় অঙ্গীকারের জন্য SHA1 করতে সক্ষম হওয়া উচিত , তারপরে ঠিক git checkout [sha]। এবং একবার আপনি এই প্রতিশ্রুতিতে পরে, আপনি কেবল git checkout -b [branchname]সেখান থেকে শাখাটি পুনরায় তৈরি করতে পারেন ।


এই ঘনীভূত / ওয়ান-লাইনারের সংস্করণটির জন্য @ ক্যাসাবেবেলকে ক্রেডিট।

আপনি এটি এক ধাপে করতে পারেন:

git checkout -b <branch> <sha>

476
আপনি এক ধাপে এটা করতে পারেন: git checkout -b <branch> <sha>
ক্যাসাবেল

200
দ্রুত টিপ - যদি আপনি কেবল শাখাটি মুছে ফেলে থাকেন তবে আপনি আপনার টার্মিনালে এই জাতীয় কিছু দেখতে পাবেন - "মুছে ফেলা শাখা <আপনার ব্র্যাঞ্চ> (ছিল <শ>")। এবং তারপরে এটি অতি-সহজ - কেবল এটি ব্যবহার করুন <sha>। যেমন উপরে উল্লিখিত হিসাবে -git checkout -b <branch> <sha>
স্নো ক্র্যাশ

6
হ্যাঁ কেবলমাত্র আপনার টার্মিনালে স্ক্রোল করুন (যদি আপনি না করেন CMD+K)
নিউ মউজিক 20'15

42
git reflog --no-abbrevপূর্ণ দেখতে ব্যবহার করুন<sha>ডিফল্টরূপে সংক্ষেপিত হচ্ছে এমন ।
jkulak

5
আমার মতো অন্য কারও জন্য, যার মুছে ফেলা শাখার শে খুঁজে পেতে সমস্যা হয়েছিল: আমি সক্ষম হয়েছি git checkout remotes/origin/deleted_branch
জেফ ইরভিন

161

অ্যাক্সেসযোগ্য কমিটমেন্টগুলি বেশিরভাগ সময় রিফ্লগে থাকে। সুতরাং, প্রথমে চেষ্টা করার চেষ্টাটি হ'ল কমান্ডটি ব্যবহার করে git reflog(যার জন্য রিফ্লোগটি প্রদর্শন করা হয় HEAD) রিফ্লগটি দেখুন ।

কমান্ডটি ব্যবহার করা যদি কমিটটি বিদ্যমান কোনও নির্দিষ্ট শাখার অংশ ছিল তবে সম্ভবত আরও কিছু সহজ git reflog name-of-my-branch। এটা একটা দূরবর্তী সঙ্গে আরো কাজ করে, উদাহরণস্বরূপ, আপনার বাধ্য যদি ধাক্কা (অতিরিক্ত উপদেশ: সবসময় পছন্দ git push --force-with-leaseপরিবর্তে যে ভাল ভুল প্রতিরোধ এবং আরো আদায়যোগ্য যায়)।


যদি আপনার প্রতিশ্রুতিগুলি আপনার পুনর্বিবেজে না থাকে (সম্ভবত এটি তৃতীয় পক্ষের সরঞ্জাম দ্বারা মুছে ফেলা হয়েছে যা রিফ্লোগে লিখিত না) তবে আমি সফলভাবে একটি শাখা পুনরুদ্ধার করে কমেন্টের মতো কমান্ডের সাহায্যে পাওয়া প্রতিশ্রুতিটির শ্যাটে পুনরুদ্ধার করেছি it সমস্ত ঝুঁকিপূর্ণ কমিটস সহ একটি ফাইল তৈরি করে):

git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt

যদি আপনার এটি একাধিকবার ব্যবহার করা হয় (বা এটি কোথাও সংরক্ষণ করতে চান), আপনি সেই আদেশ দিয়ে একটি উপকরণ তৈরি করতে পারেন ...

git config --global alias.rescue '!git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt'

এবং এটি দিয়ে ব্যবহার করুন git rescue

প্রাপ্ত প্রতিশ্রুতিগুলি তদন্ত করতে, আপনি প্রতিটি প্রতিশ্রুতি তাদের কিছু তদন্ত করার জন্য কিছু আদেশ ব্যবহার করে প্রদর্শন করতে পারেন।

প্রতিশ্রুতি মেটাটাটা (লেখক, তৈরি তারিখ এবং প্রতিশ্রুতি বার্তা) প্রদর্শন করতে:

git cat-file -p 48540dfa438ad8e442b18e57a5a255c0ecad0560

ভিন্নতাগুলি দেখতে:

git log -p 48540dfa438ad8e442b18e57a5a255c0ecad0560

আপনি যখন আপনার প্রতিশ্রুতিটি খুঁজে পেয়েছেন, তারপরে এই প্রতিশ্রুতিতে একটি শাখা তৈরি করুন:

git branch commit_rescued 48540dfa438ad8e442b18e57a5a255c0ecad0560

উইন্ডোসের অধীনে থাকা এবং জিইউআই পছন্দ করে এমনগুলির জন্য, আপনি বৈশিষ্ট্যটি ব্যবহার করে গিট এক্সটেনশনের সাহায্যে সহজেই কমিটগুলি (এবং নিঃসন্দেহে স্টেজযুক্ত ফাইলগুলিও) পুনরুদ্ধার করতে পারেনRepository => Git maintenance=>Recover lost objects...


মঞ্চযুক্ত ফাইলগুলি সহজেই পুনরুদ্ধার করতে অনুরূপ আদেশটি মুছে ফেলা হয়েছে: https://stackoverflow.com/a/58853981/717372


2
বিশাল সাহায্য। আমার একটি হারিয়ে প্রতিশ্রুতি ছিল যা আমার স্থানীয় রেপোতে কখনও ছিল না। আপনি যে প্রথম কমান্ডটি পেয়ে গেছেন তা সার্ভারে এটি খুঁজে পেতে আমাকে সহায়তা করেছিল। +1
সান অ্যাডকিনসন

1
এই গিট রেসকিউ ওরফে গডসেন্ড !!! অবদান রাখার জন্য আপনাকে অনেক ধন্যবাদ!
72A12F4E

2
আপনি আমার জীবন বাঁচিয়েছেন।
জেড লিঞ্চ

প্যাট্রিক কোরেভর এর উত্তর আমাকে সাহায্য করেছিল, কারণ আমি জানি না যে আমার শেষ মুছে ফেলা শাখাগুলি <শশা> করেছে।
মনির খান

@ মনির-খান এবং? আমার কী উপসংহার করা উচিত? প্যাট্রিক উত্তর হ'ল আমার কমান্ডের একটি অনুলিপি / পেস্ট (একটি ত্রুটির সাথে: তিনি কমিটে ফিল্টার করতে ভুলে গিয়েছিলেন) ...
ফিলিপ

45

আপনি যদি কোনও জিইউআই ব্যবহার করতে চান তবে আপনি গিটকের সাহায্যে পুরো অপারেশনটি সম্পাদন করতে পারেন।

gitk --reflog

এটি আপনাকে শাখার দায়বদ্ধতার ইতিহাসটি দেখার অনুমতি দেবে যেন শাখাটি মোছা হয়নি। এখন কেবল শাখায় সাম্প্রতিক প্রতিশ্রুতিতে ডান ক্লিক করুন এবং মেনু বিকল্পটি নির্বাচন করুন Create new branch


28

শীর্ষে ভোট দেওয়া সমাধানটি অনুরোধের চেয়ে বেশি করে:

git checkout <sha>
git checkout -b <branch>

অথবা

git checkout -b <branch> <sha>

আপনি যে নতুন প্রতিশ্রুতি দিতে ভুলে যেতে পারেন তার সবকটি পরিবর্তন সহ একসাথে আপনাকে নতুন শাখায় সরিয়ে দিন। এটি আপনার উদ্দেশ্য হতে পারে না, বিশেষত যখন শাখাটি হারিয়ে যাওয়ার পরে "প্যানিক মোডে" থাকে।

একটি ক্লিনার (এবং সহজ) সমাধানটি ওয়ান-লাইনার বলে মনে হচ্ছে (আপনি এটির <sha>সাথে খুঁজে পাওয়ার পরে git reflog):

git branch <branch> <sha>

এখন আপনার বর্তমান শাখা বা আপত্তিজনক পরিবর্তনগুলি প্রভাবিত হবে না। পরিবর্তে কেবলমাত্র নতুন শাখা তৈরি করা হবে<sha>

যদি এটি টিপ না হয় তবে এটি এখনও কাজ করবে এবং আপনি একটি সংক্ষিপ্ত শাখা পাবেন, তবে আপনি <sha>এটি সঠিক না হওয়া পর্যন্ত নতুন এবং নতুন শাখার নাম দিয়ে আবার চেষ্টা করতে পারেন ।

অবশেষে আপনি সফলভাবে পুনরুদ্ধার করা শাখার নামকরণ বা অন্য যে কোনও কিছুতে নাম পরিবর্তন করতে পারেন:

git branch -m <restored branch> <final branch>

বলা বাহুল্য, সাফল্যের মূল চাবিকাঠি ছিল সঠিক প্রতিশ্রুতি সন্ধান করা <sha>, সুতরাং আপনার প্রতিশ্রুতিগুলি বুদ্ধিমানের সাথে নাম দিন :)


14

যোগ করা হচ্ছে tfe উত্তর : রয়েছে git-resurrect.sh মধ্যে স্ক্রিপ্ট contrib/গীত উৎস এলাকা (git.git সংগ্রহস্থলের মধ্যে), যা আপনাকে সাহায্য করতে পারে।

git-resurrect <name>ডাকা শাখা টিপের ট্রেসগুলি অনুসন্ধান করার চেষ্টা করে এবং এটি <name>পুনরুত্থিত করার চেষ্টা করে। বর্তমানে, রিফ্লগটি চেকআউট বার্তাগুলির জন্য অনুসন্ধান করা হয়, এবং -rম্যাসেজের বার্তাগুলির সাথেও। সহ -mএবং -tসমস্ত রেফের ইতিহাস Merge <name> into other/ Merge <other> into <name>(যথাক্রমে) সাবধানী বিষয়গুলির জন্য স্ক্যান করা হয় যা ধীরে ধীরে তবে আপনাকে অন্য ব্যক্তির বিষয় শাখাগুলি পুনরুত্থিত করতে দেয়।


1
এটি এখন আমার পক্ষে কাজ করেছে যদিও আমার প্যাথটিতে আমাকে / usr / lib / git-core / যোগ করতে হয়েছিল। তবে এটি যে অলৌকিক প্রত্যাশায় ছিল তা সম্পাদন করে নি :(
অমানিক

10

আমি আমার মুছে ফেলা শাখাটি সন্ধান এবং পুনরুদ্ধার করতে নিম্নলিখিত কমান্ডগুলি ব্যবহার করেছি। প্রথম পদক্ষেপগুলি গিসিবির বিবরণ থেকে।

$ git fsck --full --no-reflogs --unreachable --lost-found > lost
$ cat lost | cut -d\  -f3 > commits
$ cat commits | xargs -n 1 git log -n 1 --pretty=oneline

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

$ git checkout -b NEW-BRANCH GIT-SHA

আপনাকে অনেক ধন্যবাদ. নামটি অনুসন্ধান করতে একটু সময় নিয়েছিল, তবে এটির জন্য উপযুক্ত সময়। কমিট মেসেজ স্ট্রিংয়েও অনুসন্ধান করার কোনও উপায় থাকলে, আরও ভাল better
মনির খান

9

আপনার যদি একটি রিফ্লগ না থাকে, যেমন। কারণ আপনি একটি খালি ভাণ্ডারে কাজ করছেন যার রিফ্লগ সক্ষম নেই এবং আপনি যে প্রতিশ্রুতি পুনরুদ্ধার করতে চান তা সম্প্রতি তৈরি হয়েছিল, অন্য একটি বিকল্প হ'ল সম্প্রতি তৈরি কমিট অবজেক্টগুলি সন্ধান করা এবং সেগুলি সন্ধান করা।

.git/objectsডিরেক্টরি চালানো ভিতরে থেকে :

find . -ctime -12h -type f | sed 's/[./]//g' | git cat-file --batch-check | grep commit

এটি গত 12 ঘন্টাগুলিতে তৈরি সমস্ত অবজেক্ট (কমিট, ফাইল, ট্যাগ ইত্যাদির) সন্ধান করে এবং কেবল কমিটগুলি দেখানোর জন্য এগুলি ফিল্টার করে। এগুলি পরীক্ষা করা তখন একটি দ্রুত প্রক্রিয়া।

আমি প্রথমে জাকুবের উত্তরে উল্লিখিত গিট-ড্রেসরেট.এসপি স্ক্রিপ্টটি চেষ্টা করব ।


1
চমৎকার বিকল্প ধারণা! যদিও আপনার আদেশটি ত্রুটি ছুঁড়েছে। সমস্যাটি "12 ঘন্টা" অংশের সাথে রয়েছে (আসলে "এইচ")। একবার আমি "এইচ" সরিয়ে ফেললাম ঠিক আছে। থেকে man find: "-কটাইম এন - ফাইলের স্থিতি সর্বশেষ n * 24 ঘন্টা আগে পরিবর্তন করা হয়েছিল।" সুতরাং আমাদেরও গত 12 ঘন্টাের প্রত্যাশিত আচরণ করতে 12 থেকে 0.5 পরিবর্তন করা উচিত।
প্যাগলিচা

1
আমি এখানে ওএস এক্স ১০.৮ ব্যবহার করছি, সুতরাং উপরের 'সন্ধান করুন' পতাকাগুলি যে সংস্করণটি পাঠানো হয় তার উপর ভিত্তি করে।
রবার্ট নাইট

1
হ্যাঁ, সমস্যাটি সংস্করণগুলির সাথে নিশ্চিত! সে কারণেই আমি আপনার উত্তরটি প্রথম স্থানে অগ্রাহ্য করেছি! আমি কেবল মন্তব্য করেছি যাতে লোকেরা বুঝতে পারে যে প্যারামিটারগুলি ভিন্ন হতে পারে।
প্যাগলিউচ

9

গিটহাব ব্যবহারকারীদের জন্য গিট ইনস্টল না করে:

আপনি যদি গিটহাব ওয়েবসাইট থেকে এটি পুনরুদ্ধার করতে চান তবে রেপো সম্পর্কিত ইভেন্টগুলির একটি তালিকা পেতে আপনি তাদের এপিআই ব্যবহার করতে পারেন :

প্রথম

  • এই SHAs (কমিট হ্যাশ) সন্ধান করুন:

    curl -i https://api.github.com/repos/PublicUser/PublicRepo/events

    ... বা ব্যক্তিগত ভাণ্ডারের জন্য:

    curl -su YourUserName https://api.github.com/repos/YourUserName/YourProject/events

    (গিটহাব পাসওয়ার্ডের জন্য অনুরোধ জানানো হবে)

    • (রেপো যদি দ্বি-ফ্যাক্টর লেখার উপর নির্ভর করে তবে নীচে এই উত্তরের মন্তব্য দেখুন)

পরবর্তী

  • গিটহাব এ যান এবং একটি নতুন অস্থায়ী শাখা তৈরি করুন যা চিরতরে মোছা হবে ( ক্রোম অগ্রাধিকারযোগ্য)।

   Branches শাখায় যান এবং এটি মুছুন।

   •   একই পৃষ্ঠায়, পুনরায় লোড না করে , খোলা DevTools, নেটওয়ার্ক প্যানেল। এখন প্রস্তুত ...

   Restore পুনরুদ্ধার ক্লিক করুন। আপনি একটি নতুন "লাইন" লক্ষ্য করবেন। এটিতে ডান-ক্লিক করুন এবং "সিআরএল হিসাবে অনুলিপি করুন" নির্বাচন করুন এবং কিছু সম্পাদককে এই পাঠ্যটি সংরক্ষণ করুন।

   Code কোডের অনুলিপি করা লাইনের শেষে যুক্ত করুন: এটি -H "Cookie="

আপনার এখন এমন কিছু পাওয়া উচিত:

    curl 'https://github.com/UserName/ProjectName/branches?branch=BranchSHA&name=BranchName' -H 'Cookie:' -H 'Origin: https://github.com' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US' -H 'User-Agent: User-Agent' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'Accept: */*' -H 'Referer: https://github.com/UserName/ProjectName/branches' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' --data 'utf8=%E2%9C%93&authenticity_token=token' --compressed

শেষ ধাপ

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

পুনশ্চ

আমি বুঝতে পেরেছি এটি "সহজ সমাধান" বা "সঠিক" সমাধান নাও হতে পারে তবে কারও পক্ষে এটি কার্যকর মনে হলে এটি দেওয়া হয়।


1
উপরের কয়েকটি সেখানে নির্ভর করে না git reflogএবং তাই উদাহরণস্বরূপ কার্যকর হয়েছিল যখন কোনও দূরবর্তী শাখাটি মুছে ফেলা এবং কম্পিউটারে অ্যাক্সেস হারিয়ে ফেলেন যেহেতু কোনও কার্যকর ঠান্ডা থেকে পাওয়া যায় নি reflog। উল্লেখ্য যখন GitHub থেকে OAuth এর বা দুইবার-প্রয়োজনীয় প্রমাণীকরণ ব্যবহারcurl কমান্ড ফর্মের হয়ে: curl -u username:token https://api.github.com/userবাcurl -H "Authorization: token TOKEN" https://api.github.com/repos/USER_OR_ORG_NAME/REPO_NAME/events
TT--

@ টিটি-- বাহ, আমি আনন্দিত যে এটি সাহায্য করেছে! এবং লেখক টোকেন সম্পর্কিত আপনার অবদানের জন্য ধন্যবাদ :)
ম্যাক্সিম মাজুরোক

8

আমার বোধগম্যতা থেকে যদি শাখাটি মুছতে হবে তবে অন্য কোনও শাখার কাছে পৌঁছানো যেতে পারে, আপনি নিরাপদে এটি ব্যবহার করে মুছতে পারেন

git branch -d [branch]

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

এমনকি আপনি যদি কোনও শাখা মুছুন তবে যেটি অন্য কোনওটির কাছে পৌঁছানো যায় না, আপনি কাজ হারাবেন না। অবশ্যই এটি কমিট হ্যাশ পরীক্ষা করে দেখার মতো সহজ হবে না তবে আপনি এটি এখনও করতে পারেন। এ কারণেই গিট কোনও শাখা মুছতে অক্ষম যা ব্যবহার করে পৌঁছানো যায় না -d। পরিবর্তে আপনি ব্যবহার করতে হবে

git branch -D [branch]

এটি গিট সম্পর্কে স্কট চকনের একটি ভিডিও দেখার অবশ্যই একটি অংশ is তিনি যখন শাখাগুলি সম্পর্কে এবং কীভাবে সেগুলি মুছবেন সে সম্পর্কে কথা বলুন মিনিট 58:00 Check

গিটহাবের স্কট চকনের সাথে গিটের পরিচয়


7
এটি কীভাবে প্রশ্নের উত্তর দিতে সহায়তা করছে?
দিমিত্রি জায়তসেভ

6
প্রশ্নকারীকে বলা হচ্ছে যে শাখাগুলি সামগ্রী রাখে না তবে আসলে পয়েন্টার। আপনার শাখাগুলি মুছে ফেলার ভয় হওয়ার দরকার নেই .. আপনি মুছে যাওয়াটির মতো একই প্রতিশ্রুতি দেখিয়ে নতুন তৈরি করতে পারেন .... বাহ! আমি এখনও মনে করি যখন আমি এই প্রশ্নটি জিজ্ঞাসা করেছি। ২০১২ সালের ভাল সময়!
ফ্যাবিপাগোটি

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

5

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

  1. যদি আপনি কেবল শাখাটি মুছে ফেলে থাকেন তবে আপনি আপনার টার্মিনালে এই জাতীয় কিছু দেখতে পাবেন:
    Deleted branch <your-branch> (was <sha>)

2. শাখাটি পুনরুদ্ধার করতে, ব্যবহার করুন:

    git checkout -b <branch> <sha>

আপনি যদি নিজের মাথার উপরের অংশটি 'শ' না জানেন তবে আপনি এটি করতে পারেন:

  1. আপনার মুছে ফেলা শাখার ডগায় অঙ্গীকারের জন্য 'শা' সন্ধান করুন:
    git reflog
  1. শাখাটি পুনরুদ্ধার করতে, ব্যবহার করুন:
    git checkout -b <branch> <sha>

যদি আপনার প্রতিশ্রুতিগুলি আপনার পুনর্বিবেজে না থাকে:

  1. আপনি যেমন একটি কমান্ড ব্যবহার করে সন্ধানের প্রতিশ্রুতি দিয়ে নিজের শাখাটি পুনরায় সেট করে একটি শাখা পুনরুদ্ধার করতে পারেন:
    git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt

2. আপনি এরপরে একটি ব্যবহার করে প্রতিটি প্রতিশ্রুতি প্রদর্শন করতে পারেন:

    git log -p <commit>
    git cat-file -p <commit>

4

মুছে ফেলা শাখাটি পুনরুদ্ধারের জন্য, প্রথমে রিফ্লগের ইতিহাসটি দেখুন,

git reflog -n 60

যেখানে n সর্বশেষ n কমিটকে বোঝায়। তারপরে সঠিক মাথাটি সন্ধান করুন এবং সেই মাথা দিয়ে একটি শাখা তৈরি করুন।

git branch testbranch HEAD@{30}

4

আমি চাইনি এমন কয়েকটি কমিটস সাফ করার চেষ্টা করার জন্য আমি রিমোট থেকে একটি শাখা প্রত্যাবর্তন করেছি এবং আমি যা চাইছিলাম তা সঠিকভাবে চেরিপিক করতে চলেছি। অবশ্যই আমি এসএএএগুলি ভুল লিখেছিলাম ...

এখানে আমি তাদের কীভাবে খুঁজে পেয়েছি (মূলত উত্তরের বিষয়গুলির থেকে একটি সহজ ইন্টারফেস / ইন্টারঅ্যাকশন):

প্রথমে, আপনার লগের আলগা কমিটের একটি তালিকা তৈরি করুন। যত তাড়াতাড়ি সম্ভব এটি করুন এবং কাজ করা বন্ধ করুন, কারণ এগুলি আবর্জনা সংগ্রহকারী দ্বারা ফেলে দেওয়া হতে পারে।

git fsck --full --no-reflogs --unreachable --lost-found > lost

এটি lostআপনাকে দেখতে হবে সমস্ত কমিটগুলি সহ একটি ফাইল তৈরি করে। আমাদের জীবন সহজ করতে, আসুন এটি থেকে কেবল এসএইচএ কেটে দিন:

cat lost | cut -d\  -f3 > commits

আপনাকে দেখতে commitsহবে সমস্ত কমিটের সাথে এখন আপনার কাছে একটি ফাইল রয়েছে।

ধরে নিচ্ছি আপনি বাশ ব্যবহার করছেন, চূড়ান্ত পদক্ষেপ:

for c in `cat commits`; do  git show $c; read; done

এটি আপনাকে পৃথক দেখাবে এবং তাদের প্রত্যেকের জন্য তথ্য প্রতিশ্রুতিবদ্ধ করবে। এবং আপনি টিপুন জন্য অপেক্ষা করুন Enter। এখন আপনি যা চান তার সব লিখুন এবং তারপরে চেরি-বাছাই করুন you আপনার কাজ শেষ হওয়ার পরে, কেবল এটি Ctrl-C করুন।


2

বড় হ্যাঁ

যদি আপনি জিআইটি ব্যবহার করেন তবে এই সাধারণ পদক্ষেপগুলি https://confluence.atlassian.com/bbkb/how-to-restore-a-deleted-branch-765757540.html অনুসরণ করুন

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


1

প্রথমে গিট ব্যাচে যান আপনার প্রকল্পে স্থানান্তর যেমন:

cd android studio project
cd Myproject
then type :
git reflog

আপনার সকলের পরিবর্তনের একটি তালিকা রয়েছে এবং রেফারেন্স নম্বরটি রেফ নম্বর নেয় তারপরে
অ্যান্ড্রয়েড স্টুডিও থেকে বা গিট বেচা থেকে চেকআউট নেয়। অন্য সমাধানটি রেফ নম্বরটি নিয়ে অ্যান্ড্রয়েড স্টুডিওতে যান নীচে গিট শাখাগুলিতে ক্লিক করুন চেকআউট ট্যাগে ক্লিক করুন বা রেফারেন্স নম্বরটি দিয়ে পুনর্বিবেচনা করুন তারপরে আপনার শাখা রয়েছে ol


1

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

যদি আপনার শাখাটি কোনও বিদ্যমান শাখায় একীভূত না করা হয়েছিল এবং যদি এটি আবর্জনা সংগ্রহ করা হয়, তবে আপনি যে শাখাটি একটি বিদ্যমান শাখা থেকে কাঁটাচামচ করা হয়েছিল সেই বিন্দু না হওয়া পর্যন্ত আপনি সমস্ত প্রতিশ্রুতি looseিলে ফেলবেন।


1

একটি সম্পর্কিত সমস্যা: "মুছে ফেলা শাখাগুলি কীভাবে কীভাবে হয় তা কীভাবে" অনুসন্ধান করার পরে আমি এই পৃষ্ঠায় এসেছি।

অনেকগুলি পুরানো শাখা মোছার সময়, আমি অনুভব করেছি যে আমি ভুল করে নতুন শাখাগুলির একটি মুছে ফেলেছি, তবে এটি পুনরুদ্ধার করার জন্য নামটি জানি না।

কী শাখাগুলি সম্প্রতি মুছে ফেলা হয়েছে তা জানতে, নীচে করুন:

আপনি যদি আপনার গিট ইউআরএল যান, যা দেখতে এরকম কিছু দেখাচ্ছে:

https://your-website-name/orgs/your-org-name/dashboard

তারপরে আপনি সাম্প্রতিক অতীতে কাদের দ্বারা মুছে ফেলা হয়েছে তার ফিডটি দেখতে পাবেন।


অবশ্যই। উপরের উত্তরটি গিটহাবের জন্য। আমরা স্থানীয়ভাবে গিটহাব ইনস্টল করেছি। প্রশ্ন জিজ্ঞাসা করার জন্য ধন্যবাদ।
মনোহর রেড্ডি পোরেডি

1

আমি কম্পিউটারে এটি করেছি যা আমি শাখাটি মুছে ফেলেছি:

git reflog

প্রতিক্রিয়া:

74b2383 (develope) HEAD@{1}: checkout: moving from master to develope
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{2}: checkout: moving from develope to master
74b2383 (develope) HEAD@{3}: checkout: moving from master to develope
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{4}: reset: moving to HEAD
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{5}: clone: from http://LOCALGITSERVER/myBigProject/Android.git

এবং আমি এই আদেশ দিয়ে শাখাটি পুনরুদ্ধার করব:

git checkout -b newBranchName 74b2383


0

শুধু ব্যবহার করে আমার কাছে git reflogফেরত আসেনি sha। কেবলমাত্র commit id(যা ৮ টি চর দীর্ঘ এবং একটি শা দীর্ঘতর)

সুতরাং আমি ব্যবহার git reflog --no-abbrev

এবং তারপরে উপরে বর্ণিত হিসাবে একই করুন: git checkout -b <branch> <sha>


আপনি সর্বদা সংক্ষিপ্ত 8 টি অক্ষর শা ব্যবহার করতে পারেন, আপনাকে সম্পূর্ণ শা ব্যবহার করতে হবে না
মাইকেল ড্রেহের

0

যদি আপনি ভিএসকোড ব্যবহার করছেন ... এবং আপনি নিজের শাখাটি মুছে ফেলার আগে কোনও পর্যায়ে সার্ভারের সাথে সিঙ্ক করেছেন ...

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

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

  1. গিটলেন্স প্যানেলটি খুলুন

  2. সংগ্রহস্থল প্রসারিত করুন

  3. আপনার বিভাগগুলির একটি তালিকা দেখতে হবে: শাখা / সহযোগী / রিমোটস / স্ট্যাসেস / ইত্যাদি

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

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

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