পুরানো কমিট থেকে গিটে ফাইল পুনরুদ্ধার করুন


188

আমার একটি পুরানো প্রতিশ্রুতি আছে যা আমি কয়েক সপ্তাহ আগে করেছি। আমি সেই প্রতিশ্রুতি থেকে কেবল একটি একক ফাইল পুনরুদ্ধার করতে চাই। আমি কি করব?


উত্তর:


218
git checkout 'master@{7 days ago}' -- path/to/file.txt

এটি হেডকে পরিবর্তন করবে না, এটি কেবল স্থানীয় ফাইলটি ওভাররাইট করবে path/to/file.txt

সেখানে সম্ভাব্য পুনর্বিবেচনা সম্পর্কিত স্পেসিফিকেশনগুলির জন্য ম্যান গিট-রেভ-পার্স দেখুন (অবশ্যই একটি সাধারণ হ্যাশ (ভালো dd9bacb) খুব ভাল করবে)

পরিবর্তনটি করতে ভুলবেন না (একটি পর্যালোচনার পরে ...)


15
বাহ, @ হেনরিভিল এবং সেহে, আমি আসলে ভেবেছিলাম '7 দিন আগে' হ'ল মেটা আপনার পক্ষে কী প্রতিশ্রুতিবদ্ধ তা নির্ধারণ করবে। TY!
অ্যান দি দ্যাজিলে

7
অংশ 2 যখন কোনও নির্দিষ্ট প্রতিশ্রুতি চয়ন করতে ইচ্ছুক তখন উপরের ফর্ম্যাটটি কার্যকর হয় না। এর পরিবর্তে ব্যবহার করেন সেটি কী ওরস নিচে দেখিয়েছেন, Git চেকআউট commitShaNumber - পাথ / থেকে / file.txt যাও প্রতি stackoverflow.com/questions/215718/...
AnneTheAgile

2
@ অ্যানি দ্য এগাইল আসলে এটি এখনও একই বাক্য গঠন, আমি কেবল একটি জটিল "উদাহরণ" দিয়েছিলাম revision-specificationযেহেতু ওপি বলেছিল :)
সেপ্টেম্বর

1
আপনি যে ফাইলটি পুনরুদ্ধার করতে চাইছেন সেটি মুছে ফেলার জন্য যদি আপনার প্রতিশ্রুতি ব্যবহার করা হয়, তাড়াতাড়ি কমিট করার জন্য কেবলমাত্র shacommit~1(উদা git checkout 0f4bbdcd~1 -- path/to/file.txt:) ব্যবহার করুন ।
sdlins

89
  1. এর মাধ্যমে আপনার পুরানো প্রতিশ্রুতি থেকে ফাইলটি দেখুন git checkout [Revision_Key] -- path/to/file
  2. যোগ করুন, প্রতিশ্রুতিবদ্ধ, যথাযথভাবে চাপুন।

3
git checkoutএকক ফাইলগুলি পরিচালনা করতে পারে (সেহে উত্তর দেখুন), অনুলিপি এবং পেস্ট করার দরকার নেই।
Koraktor

1
সংশোধন কীগুলি কি সর্বদা কমিটমেন্টের জন্য SHA1 হয়?
আইল্যান্ডকো

1
এগুলি হয় তবে সাধারণত SHA1 এর প্রথম 6 থেকে 8 টি অক্ষর পুনর্বিবেচনা সনাক্ত করতে যথেষ্ট।
উরস পুনর্নির্ধারণ

2
@IslandCow না, তারা SHA1 কিন্তু শাখা, ট্যাগ, বা অন্য কোন জিনিস একটি পয়েন্ট কমিট যে, যেমন হতে পারে HEAD, ORIG_HEADঅথবা সঙ্গে মিলিত যারা কোনো ^/ ~/ @-style স্বরলিপি।
আলাইস মাহডাল

2
আপনি ইঙ্গিত করেছেন যে একটির পরে ফাইলটি "যুক্ত" করার কথা। তবে এটি ভুল। ফাইলটি মঞ্চ অঞ্চলে স্থাপন করা হয়নি। এটি ইতিমধ্যে যুক্ত করা হয়েছে।
x অ্যাপল

8

আমার গিটে প্রতিশ্রুতিবদ্ধ একটি সাম্প্রতিক ফাইল পুনরুদ্ধার করা দরকার সুতরাং কেবল পুনরাবৃত্তি করতে এবং অন্য দৃষ্টিভঙ্গি দেওয়ার জন্য আপনাকে নিম্নলিখিত দুটি পদক্ষেপ চালিয়ে এটি করা দরকার:

  1. গিট লগ -৩
    এটি সাম্প্রতিক তিনটি কমিট দেখায়। মন্তব্যগুলি এবং লেখকের নামটি পড়ুন যাতে আপনি কোন সঠিক সংস্করণটি চান তা সংকীর্ণ করুন। আপনি যে কমিট করতে চান তার জন্য লম্বা কমিট আইডি (যেমন b6b94f2c19c456336d60b9409fb1e373036d3d71) লিখুন।

  2. গিট চেকআউট b6b94f2c19c456336d60b9409fb1e373036d3d71 - myfile.java
    কমিট আইডি এবং ফাইলের নামটি পুনরুদ্ধার করতে চান Pass ডাবল হাইফেনের আগে এবং পরে আপনার কোনও স্থান রয়েছে তা নিশ্চিত করুন।

এটি করার আরও অনেকগুলি উপায় রয়েছে। তবে এটি একটি সহজ আমি মনে করতে পারি। আশা করি এইটি কাজ করবে.

দ্রষ্টব্য: আপনি যদি নিজের প্রকল্পের পথ / ফোল্ডারের ভিতরে থাকেন তবে চেকআউট কমান্ডে পুরো ফাইলের পাথটি টাইপ করার প্রয়োজন নেই।


সেরা মন্তব্য। কারণ এক, যা গ্রহণযোগ্য উত্তর, ধরে নিয়েছে যে আনতে হবে এমন ফাইলটিকে উপরের দিকে ধাক্কা দেওয়া হয়েছে, তবে এই কমান্ডটি কেবল স্থানীয়ভাবে উপস্থিত ফাইলটিকে ফিরিয়ে আনা / পুনরুদ্ধার করে।
২0

1
আমার স্থানীয় গিট রেপোর মূল ফোল্ডারে এটি চেষ্টা করে দেখেছি। আমার এখনও ফাইলটির জন্য আপেক্ষিক পথ সরবরাহ করা দরকার। কেবল নিজের - [ফাইলের নাম] সরবরাহ করা কার্যকর হয়নি।
user2784627

@ ot0 না, এটি এটি ধরে নেয় না। তারা ঠিক একই উত্তর।
ম্যাট

4

সমস্ত উত্তর উল্লেখ git checkout <tree-ish> -- <pathspec>। গিট ভি ২.২.৩.০ হিসাবে একটি নতুন গিট পুনরুদ্ধার পদ্ধতি রয়েছে যা এর জন্য git checkoutকিছুটা দায়ী বলে অনুমিত হয় । গিথব ব্লগে পরিবর্তনের হাইলাইটগুলি দেখুন ।

এই আদেশের ডিফল্ট আচরণ হ'ল sourceপ্যারামিটার থেকে আসা সামগ্রী সহ একটি কার্যক্ষম গাছের অবস্থা পুনরুদ্ধার করা (যা আপনার ক্ষেত্রে কমিট হ্যাশ হবে)।

কমিট হ্যাশকে ধরে abcdefনিলে আদেশটি দেখতে পাবেন:

git restore --source=abcdef file_name

যা (ডিফল্টরূপে) এটিকে কার্যক্ষম বৃক্ষে রাখে। আপনি যদি পরিবর্তনটি সরাসরি সূচকে রাখতে চান তবে এটি সরাসরি প্রতিশ্রুতিবদ্ধ হতে পারে:

git restore --source=abcdef --worktree --staged file_name

বা সংক্ষিপ্ত বিকল্পের নাম সহ:

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