একটি থেকে ওয়ার্কিং ডিরেক্টরিতে বিনা অনুমতিতে পরিবর্তনগুলি পুনরুদ্ধার করার কোনও উপায় আছে কি git reset --hard HEAD?
git reset --hard somewhereসত্যিই বিপজ্জনক গিট কমান্ডগুলির মধ্যে একটি।
একটি থেকে ওয়ার্কিং ডিরেক্টরিতে বিনা অনুমতিতে পরিবর্তনগুলি পুনরুদ্ধার করার কোনও উপায় আছে কি git reset --hard HEAD?
git reset --hard somewhereসত্যিই বিপজ্জনক গিট কমান্ডগুলির মধ্যে একটি।
উত্তর:
আপনি সাধারণভাবে অনির্ধারিত পরিবর্তনগুলি ফিরে পেতে পারেন না ।
পূর্বে মঞ্চস্থ হওয়া পরিবর্তনগুলি ( git add) সূচিপত্রের থেকে পুনরুদ্ধারযোগ্য হওয়া উচিত, সুতরাং যদি আপনি তা করেন তবে এর git fsck --lost-foundসাথে সম্পর্কিত বিষয়গুলি সনাক্ত করতে ব্যবহার করুন । (এটি .git/lost-found/ডিরেক্টরিতে অবজেক্টগুলিকে লিখে দেয় ; সেখান থেকে আপনি git show <filename>প্রতিটি ফাইলের সামগ্রী দেখতে ব্যবহার করতে পারেন))
যদি তা না হয় তবে এখানে উত্তরটি হবে: আপনার ব্যাকআপটি দেখুন। সম্ভবত আপনার সম্পাদক / আইডিই টেম্পুলি অনুলিপিগুলি / টিএমপি বা সি এর অধীনে সঞ্চয় করে : and টিইএমপি এবং এর মতো জিনিস। [1]
git reset HEAD@{1}
এটি পূর্ববর্তী হেডে পুনরুদ্ধার করবে
[১] ভিআইএম যেমন allyচ্ছিকভাবে অবিচ্ছিন্ন পূর্বাবস্থায় সঞ্চয় হয়, গ্রহন আইডিই স্থানীয় ইতিহাস সংরক্ষণ করে ; এই জাতীয় বৈশিষ্ট্যগুলি আপনার একটি ** সংরক্ষণ করতে পারে
এই এসও থেকে উত্তর
$ git reflog show
93567ad HEAD@{0}: reset: moving to HEAD@{6}
203e84e HEAD@{1}: reset: moving to HEAD@{1}
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug
# said the commit to be recovered back is on 9300f9d (with commit message fix-bug)
$ git reset HEAD@{7}
আপনি আপনার দিন ফিরে পেয়েছিলাম! :)
git checkout HEAD@{19}আমাকে বিচ্ছিন্ন অবস্থায় হারিয়ে যাওয়া ফাইলগুলি পরীক্ষা করে দেখার অনুমতি দেয় allowed তারপরে git checkout -b new-branch-nameএগুলিকে "সংযুক্ত" অবস্থায় পুনরায় রেপোতে যুক্ত করতেন।
git checkout -b new-branch-name। প্রিটমেটিক ভার্সন কন্ট্রোল ইউজিং গিট বইটি সহজ ভাষায় গিটকে ব্যাখ্যা করার পক্ষে ভাল।
আমি git reset --hardআজও দুর্ঘটনাক্রমে আমার রেপোতে দৌড়েছি যখন আজ খুব আপত্তিহীন পরিবর্তন রয়েছে। এটি ফিরে পেতে, আমি দৌড়ে এসেছি git fsck --lost-found, যা এতে সমস্ত অনর্থিত ব্লব লিখেছিল <path to repo>/.git/lost-found/। যেহেতু ফাইলগুলি অনমুক্ত ছিল, তাই আমি তাদের otherডিরেক্টরিতে খুঁজে পেয়েছি <path to repo>/.git/lost-found/। সেখান থেকে, আমি uncommitted ফাইলগুলি দেখতে, ব্লবগুলি git show <filename>অনুলিপি করে তাদের নতুন নাম দেখতে পাচ্ছি ।
দ্রষ্টব্য: আপনি কেবল সূচকগুলিতে (ব্যবহার করে git add .) সংরক্ষণ করতে চান এমন ফাইলগুলি যুক্ত করলে এটি কেবলমাত্র কাজ করে । ফাইলগুলি যদি সূচকে না থাকে তবে সেগুলি হারিয়ে যায়।
lost-found। তবে আমি তখন git showসামগ্রীগুলি পেতে পারি ।
#!/bin/bash cd PATH_TO_PROJECT/.git/lost-found/other FILES=* COUNTER = 0 for f in $FILES do echo "Processing $f file..." git show $f > "PATH_TO_RECOVERY_DIRECTORY/$COUNTER.m" let COUNTER=COUNTER+1 done
হ্যাঁ, আপনি গিটে হার্ড রিসেট থেকে পুনরুদ্ধার করতে পারেন ।
ব্যবহার করুন:
git reflog
আপনার প্রতিশ্রুতি সনাক্তকারী পেতে। তারপরে ব্যবহার করুন:
git reset --hard <commit-id-retrieved-using-reflog>
এই কৌশলটি আমার জীবনকে কয়েকবার বাঁচিয়েছিল।
আপনি এখানে প্রত্যাবর্তনের ডকুমেন্টেশন খুঁজে পেতে পারেন ।
git reset --hardঅন্যটি ব্যবহার করে পুনরুদ্ধার করা স্বজ্ঞাত বলে মনে হতে পারে git reset --hardতবে আপনি যদি --hardস্যুইচটি ব্যবহার না করেন তবে আপনাকে আপনার কর্মক্ষেত্রের এন্ট্রিগুলি ছেড়ে দেওয়া হবে যা আপনার সবে থেকে পুনরুদ্ধারকৃত কার্যকারিতা কার্যকরভাবে ফিরিয়ে আনবে।
git logকরি তখন কমিটের আইডি দেখতে পেলাম না। সাথে git reflogআমি কমিট আইডি দেখতে
আমি একটি স্থানীয় প্রকল্পে কাজ করার সময়, আমি এটিকে গিটহাবে স্থানান্তর করতে চেয়েছিলাম এবং তারপরে একটি নতুন সংগ্রহশালা তৈরি করতে চাই। আমি .gitignore দিয়ে এই নতুন ফাইলগুলি নতুন সংগ্রহশালায় যুক্ত করার চেষ্টা করার সময়, আমি ঘটনাক্রমে একটি ভুল ফাইল যুক্ত করেছি এবং তারপরে এটি সাফ করার চেষ্টা করেছি।
আমি দৌড়ে git reset --hard origin/master: পি
তারপরে আমার স্থানীয় সমস্ত ফাইল মুছে ফেলা হয়েছে কারণ রেপো খালি ছিল। ভেবেছিলাম সব শেষ হয়ে গেছে।
এটি আমার জীবন রক্ষা করেছে:
git reflog show
git reset HEAD@{1}
git push
আশা করি এটি অন্য জীবন বাঁচায়।
git reset HEAD@\{27\} , আপনাকে ধন্যবাদ!
git reflog showচেক করতে ব্যবহার করি এবং সেই প্রথম প্রতিশ্রুতিটি ব্যবহার করিgit reset HEAD@{number}
আপনি যদি ইন্টেলিজের মতো কিছু ব্যবহার করেন:
প্রসঙ্গ মেনুতে, স্থানীয় ইতিহাস নির্বাচন করুন এবং সাবমেনুতে ইতিহাস দেখান ক্লিক করুন:
কোনও প্রকল্প বা ফোল্ডারের জন্য স্থানীয় ইতিহাসের দর্শন আপনাকে গত কয়েকদিনের মধ্যে যা কিছু করেছে তা দেখায়। ডায়লগ বক্সের নীচের অংশের অ্যাকশন কলামে, আপনি যে ক্রিয়াটি ফিরে যেতে চান তা নির্বাচন করুন। [...] সুতরাং, ডায়লগ বাক্সের উপরের অংশটি পরিবর্তিত ফাইলগুলির ট্রি ভিউ দেখায়। আপনি যদি মুছে ফেলা ফাইলটিকে পুনরুদ্ধার করতে চান তবে তার পরে অন্য পরিবর্তনগুলি নির্বিশেষে, আপনি গাছের দৃশ্যে Lost.txt ফাইলটি নির্বাচন করতে পারেন এবং রিভার্ট বোতামটি ক্লিক করতে পারেন।
http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/
এই মাত্র আমার গাধা আগুন লাগিয়ে!
git reflogআমি পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ না কারণ কাজ করে না। git fsck --lost-foundমঞ্চযুক্ত ফাইলগুলির জন্য কাজ করেছে তবে সেগুলির সবই মঞ্চস্থ হয়নি। ইন্টেলিজের স্থানীয় ইতিহাস আমার সংরক্ষিত ফাইলগুলি নিখুঁতভাবে পুনরুদ্ধার করেছে, আমি এই বৈশিষ্ট্যের জন্য অত্যন্ত কৃতজ্ঞ
আমি সবেমাত্র করেছি git reset --hardএবং আমার সমস্ত আপত্তিহীন পরিবর্তনগুলি হারিয়েছি। ভাগ্যক্রমে, আমি একটি সম্পাদক (ইন্টেলিজ) ব্যবহার করি এবং আমি স্থানীয় ইতিহাস থেকে পরিবর্তনগুলি পুনরুদ্ধার করতে সক্ষম হয়েছি। গ্রহন আপনাকে একই কাজ করার অনুমতি দেয়।
সংজ্ঞা অনুসারে, git reset --hardগিটকে পুনরুদ্ধারের কোনও উপায় ছাড়াই নিরীক্ষিত পরিবর্তনগুলি ফেলে দেবে (আপনার ব্যাকআপ সিস্টেমটি সাহায্য করতে পারে, তবে গিট নয়)।
আসলে, খুব কম ক্ষেত্রেই এমন git reset --hardধারণা পাওয়া যায় যেখানে ভাল ধারণা পাওয়া যায়। বেশিরভাগ ক্ষেত্রে একই কাজটি করার জন্য একটি নিরাপদ আদেশ রয়েছে:
আপনি যদি আপনার আপত্তিহীন পরিবর্তনগুলি ফেলে দিতে চান তবে ব্যবহার করুন git stash। এটি এই পরিবর্তনগুলির একটি ব্যাকআপ রাখে, যা আপনি চালনা করে কিছু সময়ের পরে শেষ হবে git gc। আপনি যদি ৯৯.৯% নিশ্চিত হন তবে আপনার আর কখনও এই পরিবর্তনগুলির প্রয়োজন হবে না, তবে git stash0.1% ক্ষেত্রে এখনও আপনার বন্ধু। আপনি যদি 100% নিশ্চিত হন তবে git stashতা এখনও আপনার বন্ধু কারণ এই 100% এর একটি পরিমাপের ত্রুটি রয়েছে ;-)।
আপনি যদি HEADইতিহাসে বর্তমান এবং বর্তমান শাখার ডগা সরিয়ে নিতে চান তবে git reset --keepআপনার বন্ধু। এটি একই কাজ git reset --hardকরবে তবে এটি আপনার স্থানীয় পরিবর্তনগুলি ত্যাগ করবে না ।
আপনি যদি উভয়ই করতে চান তবে git stash && git reset --keepআপনার বন্ধু।
আপনার আঙ্গুলগুলি ব্যবহার না করতে শেখান git reset --hard, এটি একদিন ফেরত দেবে।
git stash && git reset --hardকোনও স্ট্যাশড সামগ্রী মুছে ফেলতে পারে তবে তা সঠিক?
git reset --hardস্ট্যাশ ফেলে না এই অর্থে git stashএটি একটি প্রতিস্থাপন git reset --hardযে এটি আপনার কর্মক্ষেত্র থেকে আপত্তিজনক পরিবর্তনগুলি সরিয়ে দেয়, এগুলি স্থায়ীভাবে তাড়িয়ে দেওয়ার পরিবর্তে এগুলি নিরাপদ রাখে।
যদি আপনি দুর্ঘটনাক্রমে শক্ত প্রতিশ্রুতি পুনরায় সেট করেন, তবে এটি করুন,
git reflog show
git reset HEAD@{2} // i.e where HEAD used to be two moves ago - may be different for your case
ধরে HEAD@{2}নেওয়া সেই রাজ্য যা আপনি ফিরে যেতে চান is
আমি কিছু পরিবর্তন হারিয়ে ফেললে সাধারণত আমি এটি করি।
git reflog
git checkout <commit id> // now you are in where you want but you cannot push from detached branch to master
manually copy and paste changes from detached branch to master or working branch
git reset --hard HEAD // if needed
git add ... > git commit ... > git push ...
পয়েন্টারটি আপনার পূর্ববর্তী কমিটগুলিতে ফিরে যেতে তবে আপনি আপনার সর্বশেষ কমিটস চেকআউটটিতে এ পর্যন্ত পরিবর্তনগুলি রেখেছেন git reset --soft dadada
তথ্য হারিয়ে গেছে।
যেহেতু আপনি প্রতিশ্রুতিবদ্ধ হন নি, আপনার .git কখনই এই তথ্য সংরক্ষণ করে না। সুতরাং, মূলতgit আপনার পক্ষে পুনরুদ্ধার করতে পারে না।
তবে, আপনি যদি এখনই এটি git diffকরেন তবে নীচের 3 টি সহজ পদক্ষেপের সাহায্যে টার্মিনাল আউটপুটটি ব্যবহার করে আপনি পুনরুদ্ধার করতে পারেন।
git diff। ডিফফ্যাচ নামে একটি ফাইলে o / p সংরক্ষণ করুনpatch -p1 < diff.patch)তুমি বাঁচাও! :)
দ্রষ্টব্য: আপনি যখন টার্মিনাল থেকে কোনও ফাইলে ডেটা অনুলিপি করছেন, সতর্কতা অবলম্বন করুন এবং স্পষ্টভাবে দেখুন যে ডেটাটি অবিচ্ছিন্ন আউটপুট এবং এতে কোনও অপ্রয়োজনীয় ডেটা নেই (আপ এবং ডাউন তীর টিপে কারণে)। অন্যথায় আপনি এটি জগাখিচুড়ি হতে পারে।
আমি একই ইস্যুতে দৌড়ে গিয়েছিলাম এবং আমি প্রায় উন্মাদ হয়ে যাচ্ছিলাম .... প্রথমদিকে আমি প্রকল্পটি প্রতিশ্রুতিবদ্ধ করেছি এবং একীভূত হয়েছি .. পরে যখন আমি চালানোর চেষ্টা করছিলাম তখন আমি git push --set-upstream origin master এই ত্রুটিটি পেয়েছিলাম
fatal: refusing to merge unrelated histories
সুতরাং আমি দৌড়ে গিয়েছিলাম git reset --hard HEADএবং এটি একটি 3 সপ্তাহের প্রকল্প মুছে ফেলেছিল তবে নীচে এই কয়েকটি কমান্ড দিনটি সংরক্ষণ করে:
git reset HEAD@{1} //this command unstage changes after reset
git fsck --lost-found //I got the dangling commit fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
git show <dangling commit something like-> fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b>
git rebase fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
আশাকরি এটা সাহায্য করবে
আপনি একটি করার পরে একটি প্রতিশ্রুতি ফিরে পেতে পারেন reset --hard HEAD।
শাখায় git reflogইতিহাসের ইতিহাস পরীক্ষা করতে " " ব্যবহার করুন HEAD।
আপনি এখানে আপনার প্রতিশ্রুতিবদ্ধকরণ এবং এর আইডি দেখতে পাবেন।
ক
git reset {commit Id of the commit you want to bring back}
git reset --hard <commit>গিটারের ইতিহাস থেকে মুছে ফেলার আগে যে কোনও আপত্তিহীন ফাইলগুলি খুঁজে পেলাম way তবে আমি যথেষ্ট ভাগ্যবান যে আমার কোড এডিটর সেশনটি আমি আমার চুলগুলি টানতে থাকাকালীন পুরো সময়টিতে উন্মুক্ত রেখেছিলাম, আমি আবিষ্কার করেছি যে control + zপ্রতি প্রভাবিত ফাইলগুলির মধ্যে একটি সাধারণ ফাইলটি গিতের আগে সংস্করণে ফিরিয়ে দিয়েছিল আমি বিশেষভাবে এটি জিজ্ঞাসা করি নি এমন সমস্ত কিছু বাধ্যতার সাথে পুনরায় সেট করুন।Hooray!!
git reset HEAD@{4}
4 পদক্ষেপ আগে 4 পরিবর্তন হয়। আপনি যদি একটি সঠিক পদক্ষেপ নির্বাচন করেন তবে এটি ফাইলগুলির তালিকা প্রদর্শন করা উচিত যা আপনি হার্ড থেকে সরিয়েছেন। তারপরে:
$ git reflog show
এটি আপনাকে ইতিমধ্যে তৈরি করা স্থানীয় প্রতিশ্রুতিবদ্ধ ইতিহাস দেখায়। এখন কর:
$ git reset --hard 8c4d112
8c4d112 এমন একটি কোড যা আপনি সেখানে নিজের হার্ডটি পুনরায় সেট করতে চান। আরও তথ্যের জন্য https://www.theserverside.com/video/How-to-use-the-git-reset-hard-command-to-change-a-commit-history এ দেখুন
সঠিক উত্তরসমূহ. ঠিক আছে, এখন আমি গিট পছন্দ করি :-) এখানে একটি সহজ রেসিপি।
git log HEAD@{2}
git reset --hard HEAD@{2}
"2" যেখানে আপনি নিজের পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ সেখানে ফিরে যাওয়ার সংখ্যা। আমার ক্ষেত্রে, সহকর্মী এবং মনিবদের দ্বারা বাধাগ্রস্ত হয়ে কিছু বিল্ড ইস্যুকে ডিবাগ করতে সহায়তা করে; সুতরাং, একটি পুনরায় সেট - দুইবার; সুতরাং, হেড এবং হেড @। 1 over ওভার-রাইট ছিল। হ্যাঁ, আমাদের কঠোর পরিশ্রম হারিয়ে ফেলত।
আমি করেছিলাম git reset --hard ভুল করে ভুল প্রকল্পে করেছি (আমি জানি ...) এবং ভেবেছিলাম আমি কাজ হারাতে যাচ্ছি। ভাগ্যক্রমে আমি একটি ফাইলে কাজ করেছি এবং এটি কমান্ড চলাকালীন এখনও খোলা ছিল।
সুতরাং, যদিও আমি প্রতিশ্রুতিবদ্ধ না করেও আমি এটি দিয়ে পুরানো ফাইলটি পুনরুদ্ধার করতে সক্ষম হয়েছি COMMAND + Zএবং এটি কার্যকর হয়েছে!
সুতরাং, চেষ্টা করুন COMMAND + Z।
এই এসও থেকে রেফারেন্স উত্তর,
গিট রিফ্লোগ শো চালানোর পরে বলুন আপনি 9300f9d কমিট করতে চান
গিট রিসেটের পরে 9300f9d রিসেট করুন
আপনি গিট স্ট্যাটাসটি করতে পারেন এবং তারপরে আপনার পরিবর্তনগুলি পুনরুদ্ধার করতে আপনার ফাইল (গুলি) পরীক্ষা করতে হবে
গিট চেকআউট - ফাইলপথ / নাম
যদি আপনি নেটবিনে বিকাশ করছেন তবে ফাইল ট্যাব এবং ফাইল সম্পাদনা ক্ষেত্রের মধ্যে দেখুন। একটি "উত্স" এবং "ইতিহাস" রয়েছে। "ইতিহাস" এ আপনি সংস্করণ নিয়ন্ত্রণ (গিট / অন্যান্য) ব্যবহার করে পরিবর্তনগুলি দেখতে পাবেন, তবে স্থানীয়ভাবে পরিবর্তিত পরিবর্তনগুলিও দেখতে পাবেন। এই ক্ষেত্রে, স্থানীয় পরিবর্তনগুলি আপনাকে বাঁচাতে পারে।
( ব্যবহারকারীদের উপসেটের জন্য উপযুক্ত উত্তর )
আপনি যদি (কোনও সাম্প্রতিক) ম্যাকোএস চালু থাকেন এবং এমনকি আপনি আপনার টাইম মেশিন ডিস্ক থেকে দূরে থাকেন তবে ওএসগুলি স্থানীয় স্ন্যাপশট নামে পরিচিত প্রতি ঘন্টা ব্যাকআপগুলি সংরক্ষণ করবে ।
টাইম মেশিন প্রবেশ করুন এবং আপনার হারিয়ে যাওয়া ফাইলটিতে নেভিগেট করুন। এর পরে ওএস আপনাকে জিজ্ঞাসা করবে:
The location to which you're restoring "file.ext" already contains an
item with the same name. Do you want to replace it with the one you're
restoring?
আপনি যে ফাইলটি হারিয়েছেন তা পুনরুদ্ধার করতে সক্ষম হওয়া উচিত।
যদি আপনার একই কোড সহ কোনও আইডিই খোলা থাকে তবে প্রতিটি পরিবর্তিত ফাইলের জন্য একটি সিটিআরএল + z করার চেষ্টা করুন। এটি আমাকে গিট পুনরায় সেট করার পরে - আমার পুনর্নির্বাচিত পরিবর্তনগুলি পুনরুদ্ধার করতে সহায়তা করে।
যখন আমরা গিট রিসেট করি - এবং স্থানীয় সমস্ত আপত্তিজনক পরিবর্তন মোছা হয়। পরিবর্তনগুলি পুনরুদ্ধার করতে - আইডিইতে ফাইলটিতে ক্লিক করুন, স্থানীয় ইতিহাসের সাথে ফাইলটির তুলনা করুন যা তারিখ অনুসারে পরিবর্তনগুলি তালিকাভুক্ত করবে এবং আমরা তথ্য পুনরুদ্ধার করতে পারি। আপনার দিনটি বাঁচা গেল!
git reset। আপনার সেই আদেশের দরকার নেই এবং এটি বিপজ্জনক, সুতরাং এটি ব্যবহার করবেন না। পূর্বের প্রতিশ্রুতিতে শাখাটি ফেরত পাঠাতেgit rebase -iএবং আপনি চান না এমনgit checkoutকমিটগুলি বাদ দিন বা (মাথা বিচ্ছিন্ন করে) অনুসরণ করেgit branch -Mশাখার ডগা সরিয়ে ফেলুন। প্রথমটি স্থানীয় পরিবর্তনগুলির সাথে চালিত হতে অস্বীকার করবে এবং পরে কেবল তখন চালানো হবে যখন স্থানীয়ভাবে পরিবর্তিত ফাইলগুলি সংশোধনগুলির মধ্যে পার্থক্য না করে।