গিট টান পূর্বাবস্থায় ফিরিয়ে আনুন, কীভাবে পুরাতন অবস্থায় রেপোস আনবেন


1006

গিট টান ফিরিয়ে আনতে বা পূর্বাবস্থায় ফেলার কোনও উপায় আছে যাতে আমার উত্স / রেপোগুলি পুরানো অবস্থায় ফিরে আসে যা গিট টানার আগে ছিল? আমি এটি করতে চাই কারণ এটি এমন কিছু ফাইল একত্রীভূত করেছে যা আমি এটি করতে চাইনি, তবে কেবলমাত্র বাকী অন্যান্য ফাইলগুলিকে মার্জ করে। সুতরাং, আমি এই ফাইলগুলি ফিরে পেতে চাই, এটি কি সম্ভব?

সম্পাদনা: আমি স্পষ্টতার জন্য গিট মার্জটি পূর্বাবস্থায় রাখতে চাই। কিছু উত্তর দেখার পরে, আমি এটি করেছি

git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...

এখন, আমি কি করব? করছেন git reset --hard ঠিক আছে? আমি এটি আবার স্ক্রু করতে চাই না, তাই বিস্তারিত পদক্ষেপের জন্য জিজ্ঞাসা করছি?


23
দেখে মনে হচ্ছে আপনার ইতিহাসে কেবল দুটি জিনিস রয়েছে: একটি ক্লোন এবং একটি আনা ch কেবল ক্লোনটিতে রিসেট করুন:, এক্ষেত্রে git reset --hard 01b34faআপনি এমনটি করতে পারতেন git reset --hard HEAD^যা হেডের আগে একটি প্রতিশ্রুতি পুনরায় সেট করে।
jkp

2
- যদি আপনি আপনার কর্মক্ষম ডিয়ার মধ্যে ফাইলগুলি সংশোধন করতে চান তবেহাড়্ড প্রয়োজনীয়
উইলিয়াম পার্সেল

3
@ seg.server.fault: যদি এটি কাজ করে, আপনি সর্বদা উত্তরটি গ্রহণ করতে পারেন;)
জেপিপি

7
গিট রিসেট
হ্যার্ড

7
git reflogগিট দিয়ে যা করা হয়েছে তা সব দেখাবে। একটি উদ্বেগ রয়েছে যা যা git reset --hard [sha1 of something from reflog]দেখানো হয়েছে সবকিছুকে ফিরিয়ে দেবে reflog, যা কখনও কখনও লক্ষ্য নয়, যেমন। আপনি খারাপ তথ্য (সংঘটিত) সহ উত্স থেকে টানা মাস্টার শাখায় মার্জটি ফিরিয়ে দিতে চান এবং সেই মার্জ হওয়ার পরে আপনি অন্য শাখায় কাজ করেছেন। reflogপ্রতিটি শাখা অন্যান্য শাখায় প্রদর্শিত হবে will তবে git checkout masterএবং git reset --hard [SH1 of commit on master branch just before merge]উত্স থেকে টানা একত্রিত করে কেবলমাত্র বর্তমান মাস্টার শাখা পুনরায় সেট করবে।
ভ্লাদিমির ভুকানাক

উত্তর:


1427

রানিং git pullনিম্নলিখিত ক্রিয়াকলাপগুলি সম্পাদন করে:

  1. git fetch
  2. git merge

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

বাতিল করতে একত্রীকরণ , ব্যবহার git reset --hardএকটি পূর্বের অবস্থায় স্থানীয় সংগ্রহস্থলে রিসেট করতে; পূর্ববর্তী রাজ্যের SHA-1 সন্ধান করতে গিট-রেফ্লোগ ব্যবহার করুন এবং তারপরে এটি পুনরায় সেট করুন।

সতর্কতা

এই বিভাগে তালিকাভুক্ত কমান্ডগুলি সমস্ত আপত্তিহীন পরিবর্তনগুলি সরিয়ে ফেলবে, সম্ভাব্যভাবে কাজের ক্ষতির কারণ:

git reset --hard

বিকল্পভাবে, সময় একটি নির্দিষ্ট পয়েন্ট পুনরায় সেট করুন, যেমন:

git reset --hard master@{"10 minutes ago"}

325
একটি চমত্কার উপায় পরিবর্তে Git-reflog এবং অনুলিপি হ্যাশ ব্যবহার করে, পূর্বের অবস্থায় নিতে, মত একটি শর্টকাট ব্যবহার করা master@{1}, পূর্ববর্তী অবস্থানে যা master, master@{"5 minutes ago"}অথবা master@{14:30}man git-rev-parse"নির্দিষ্টকরণের পুনর্বিবেচনাগুলি" নামক বিভাগটিতে এইভাবে সংশোধনগুলি নির্দিষ্ট করার সম্পূর্ণ বিবরণ পাওয়া যাবে ।
ক্যাসাবেল

38
এই ক্ষেত্রে ওআরআইজিএইইডিএইডিও কাজ করা উচিত ("গিট রিসেট
জাকুব নরবস্কি

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

আমি টান যখন, এটা বলে Updating d2c90a3..035ac4d। এখানে, আপনি d2c90a3পুনরায় সেট করতে পরামিতি হিসাবে ব্যবহার করতে পারেন ।
থাই 6

আপনি যখন রিফ্লোগ ব্যবহার করেন তখন আপনাকে হ্যাশ টাইপ করতে হবে না। আপনি হেড @ {1} বা রিফ্লগে সংজ্ঞায়িত হিসাবে আগের কোনও সংখ্যাটিও ব্যবহার করতে পারেন।
সাইমন দ্য ক্যাট

338

জেপপির উত্তর হিসাবে একই, তবে এখানে পূর্ণ আদেশ:

git reset --hard a0d3fe6

যেখানে a0d3fe6 করে পাওয়া যায়

git reflog

এবং আপনি যে বিন্দুতে ফিরে যেতে চান সেই বিন্দুটির দিকে তাকিয়ে।


আমি শুধু git reset HEAD --hardউদাহরণস্বরূপ করতে পারি না কেন ?
সুং চো

9
@ মাইকিসি এই পদ্ধতির সাহায্যে আপনাকে বেশ কয়েকটি টান ফিরে যেতে দেয়, উদাহরণস্বরূপ
এক্সজি

2
আমি বাম দিকের আইডিস ব্যবহার করতে সক্ষম হইনি তবে git reset --hard HEAD@{n}কাজ করেছি
E. Sundin

1
এত বছর পরে এখানে প্রায় প্রতিলিপি না দিয়ে আপনার জেকপির উত্তরে একটি সম্পাদনার পরামর্শ দেওয়া উচিত ছিল।
অভিষেক আনন্দ

যদি আমার এটি থাকে git reflog: dab04ec HEAD @ {0}, আআআআআআআআআআআআডি হেড @ {1} এবং বিবিবিবিবিবি হেড @ {2}} আমি যদি করি তবে আমি git reset --hard bbbbbbbহেড 0 এবং 1 হারাব?
সন্ধ্যা :

115

মার্জটি পূর্বাবস্থায় ফেলার আরও একটি আধুনিক উপায় হ'ল:

git merge --abort

এবং সামান্য পুরানো উপায়:

git reset --merge

পূর্ববর্তী উত্তরে বর্ণিত পুরানো-স্কুল পদ্ধতি (সতর্কতা: আপনার সমস্ত স্থানীয় পরিবর্তনগুলি বাতিল করে দেবে):

git reset --hard

তবে প্রকৃতপক্ষে, এটি লক্ষ্য git merge --abortকরার মতো git reset --mergeযে MERGE_HEADএটি উপস্থিত রয়েছে কেবলমাত্র তার সমতুল্য । এটি মার্জ কমান্ডের জন্য গিট সহায়তাতে পড়তে পারেন।

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

ব্যর্থ মার্জ হওয়ার পরে, যখন সেখানে নেই MERGE_HEAD, ব্যর্থ মার্জটি পূর্বাবস্থায় ফেলা যায় git reset --mergeতবে প্রয়োজনীয়ভাবে তা করা যায় না git merge --abort, তাই তারা একই জিনিসটির জন্য কেবল পুরানো এবং নতুন বাক্য গঠন নয় । এই কারণেই আমি git reset --mergeপ্রতিদিনের কাজে অনেক বেশি দরকারী বলে মনে করি।


20
git merge --abortএকত্রিত হওয়ার সময় কাজ করে, git pullশেষ না হয়ে। সুতরাং এই উত্তরটি প্রশ্নের সাথে অপ্রাসঙ্গিক বলে মনে হচ্ছে।
অভিষেক আনন্দ

1
git reset --mergeপ্রতিশ্রুতির জন্য মঞ্চস্থ না হওয়া সমস্ত পরিবর্তন মুছে দেয়। এটি হার্ড উপায় খুঁজে পেয়েছি।
theadriangreen

62

এটি প্রথম ব্যবহারে কাজ করে: git reflog

আপনার প্রিভিয়াস স্টেটের আপনার SHA সন্ধান করুন এবং তৈরি করুন (শিরোনাম @ {1} একটি উদাহরণ)

git reset --hard HEAD@{1}

40

আপনার যদি গিটক (আপনার গিট কমান্ড লাইন থেকে "গিটক - সমস্ত চালানোর চেষ্টা করুন") এটি সহজ it's কেবল এটি চালান, আপনি রোলব্যাক করতে চান এমন প্রতিশ্রুতি নির্বাচন করুন (ডান ক্লিক করুন) এবং "এখানে মাস্টার শাখা পুনরায় সেট করুন" নির্বাচন করুন। যদি আপনার কোনও আপত্তিজনক পরিবর্তন না হয় তবে "হার্ড" বিকল্পটি বেছে নিন।


8
এটি না দেখলে এটি চলমান running এটি একটি ক্রেজি জিআইআই পপ আপ করে।
ইভান মুরান

35

ধরুন $COMMITআপনি সঞ্চালনের আগে সর্বশেষ কমিট আইডি ছিল git pull। শেষ টানটি পূর্বাবস্থায় ফেলার জন্য আপনার যা দরকার তা হ'ল

git reset --hard $COMMIT

বোনাস:

টানার কথা বলতে গিয়ে, আমি একটি আকর্ষণীয় কৌশল ভাগ করতে চাই,

git pull --rebase

এই উপরের কমান্ডটি আমার গিট লাইফের সবচেয়ে দরকারী কমান্ড যা অনেক সময় সাশ্রয় করে।

সার্ভারে আপনার নতুন প্রতিশ্রুতি দেওয়ার আগে, এই কমান্ডটি ব্যবহার করে দেখুন এবং এটি স্বয়ংক্রিয়ভাবে সর্বশেষ সার্ভারের পরিবর্তনগুলি (একটি আনয়ন + মার্জ সহ) সিঙ্ক করবে এবং গিট লগে আপনার প্রতিশ্রুতি শীর্ষে রাখবে। ম্যানুয়াল টান / মার্জ সম্পর্কে চিন্তা করার দরকার নেই।

এখানে বিশদটি সন্ধান করুন: http://gitolite.com/git-pull--rebase


17

আপনার পরিবর্তনগুলি টেনে তোলার এটি সহজতম উপায়।

** Warning **

দয়া করে আপনার পরিবর্তিত ফাইলগুলির ব্যাকআপ নিন কারণ এটি সদ্য নির্মিত ফাইল এবং ফোল্ডারগুলি মুছে ফেলবে

git reset --hard 9573e3e0

9573e3e0আপনার {কমিট আইডি Where কোথায়


এই প্রতিক্রিয়াটি খুব দরকারী, কারণ আমরা যদি গিট টান উত্সের শাখাটি পাই এরকম কিছু পাই Updating ffce65bd..e929e884, করgit reset --hard ffce65bd
আর্নেস্তো আলফোনসো

15

আপনি করতে পারেন git reset --hard ORIG_HEAD

যেহেতু "টান" বা "মার্জ" সেট করুন এই ক্রিয়াগুলি করার আগে ORIG_HEAD কে বর্তমান অবস্থা হিসাবে সেট করুন।


5

গিট টান অপারেশন নীচে।

আমি। git fetch

আ। git merge

পূর্বাবস্থায় ফিরে আসার জন্য যেকোনো অপারেশন করুন:

আমি। git reset --hard --- এটি সমস্ত স্থানীয় পরিবর্তনও ফিরিয়ে দেয়

অথবা

আ। git reset --hard master@{5.days.ago} (যেমন 10.minutes.ago, 1.hours.ago, 1.days.ago..) স্থানীয় পরিবর্তনগুলি জন্য।

অথবা

III। git reset --hard commitid

লিখেছেন:

এর git pull --rebaseপরিবর্তে পরবর্তী সময় ব্যবহার করুন git pull.. এর সিঙ্ক সার্ভারটি পরিবর্তন করে (আনুন এবং একত্রিত করুন)।


4

যদি কোনও ব্যর্থ মার্জ থাকে, যা কোনওটিকে পূর্বাবস্থায় ফেরাতে চাওয়ার সর্বাধিক সাধারণ কারণ git pull, দৌড়াদৌড়ি git reset --mergeএকটাই প্রত্যাশা করে যা করে: ফ্যাচ করা ফাইলগুলি রাখুন, তবে সংহতকরণের git pullচেষ্টা করা মার্জটিকে পূর্বাবস্থায় ফিরিয়ে আনুন । তারপরে কেউ সিদ্ধান্ত নিতে পারে যে git mergeকখনও কখনও উত্সাহিত হওয়া বিশৃঙ্খলা ব্যতীত কী করা উচিত । এবং --hardঅন্য প্রতিটি উত্তরে বর্ণিত সঠিক প্রতিশ্রুতি আইডিটি খুঁজতে এটির প্রয়োজন হয় না ।

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