একটি একক ফাইলের হার্ড রিসেট


1003

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

এসভিএন-তে, আমি ব্যবহার করব svn revert <filename>( svn update <filename>প্রয়োজনে তারপরে অনুসরণ করব ) তবে গিটে আমার ব্যবহার করা উচিত git reset --hard। তবে এই কমান্ডটি একটি ফাইলে অপারেট করতে পারে না।

গিটের কোনও একক ফাইলের পরিবর্তনগুলি বাতিল করে তাজা হেড কপি দিয়ে ওভাররাইট করার কোনও উপায় আছে কি?


3
git checkoutনীচে উত্তর দেওয়া হয়। গিটের মধ্যে, "রিভার্ট" হ'ল এমন একটি কাজ যা আপনি প্রতিশ্রুতিবদ্ধ হন। "রিভার্ট" আপনার কার্যকরী ডিরেক্টরিতে একটি historicalতিহাসিক প্রতিশ্রুতির বিপরীতটি প্রতিস্থাপন করে, যাতে আপনি একটি নতুন প্রতিশ্রুতি দিতে পারেন যা প্রত্যাবর্তিত প্রতিশ্রুতি "পূর্বাবস্থায় ফিরে আসে"। আমি দেখতে পাচ্ছি যে এসভিএন থেকে গিটিং করতে আসা লোকদের জন্য এটি প্রায়শই বিভ্রান্তির বিষয়।
ড্যান রে


আপনি যদি আগ্রহী হন যে কেন আপনি পাথগুলি দিয়ে হার্ড রিসেট করতে পারবেন না, সেখানে আমার উত্তরটি দেখুন ।
ব্যবহারকারী

এই প্রশ্নটি ধরে নেওয়া হয়েছে যে হার্ড রিসেটটি কী তা জানে।

উত্তর:


1804

আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

git checkout HEAD -- my-file.txt

... যা my-file.txtহ্যাড থেকে সূচকে তার কার্যের অনুলিপি এবং এর রাজ্য উভয়ই আপডেট করবে ।

--মূলত এর অর্থ: প্রতিটি যুক্তি এই ফাইলটির পরে ফাইলের নাম হিসাবে বিবেচনা করুনএই উত্তরে আরও বিশদ । এটি উল্লেখ করার জন্য ভনকে ধন্যবাদ ।


58
আরও সম্পূর্ণ উত্তর। +1 টি;) জন্য '-', তাও দেখতে stackoverflow.com/questions/6561142/... (এবং, আরো সাধারণভাবে, stackoverflow.com/questions/1192180/... )
VonC

8
এছাড়াও, ভুলে যাবেন না HEAD~1যে পেনাল্টিমেট কমিটকে নির্দেশ করতে আপনি পূর্বের প্রতিশ্রুতিটি উল্লেখ করতে পারেন ।
রায়য়ান্ট

14
আপনি HEADযদি বর্তমান শাখার শীর্ষে থাকেন তবে আপনি ছেড়ে দিতে পারেন - দেখুন নোরবায়ার.com
rails-

4
কোনও অন্তর্দৃষ্টি কেন resetআদেশ (যেমন এটি বলে) "পাথগুলি দিয়ে হার্ড রিসেট করতে পারে না" এবং তারপরে কেন পুরো checkoutআদেশটি পুনরায় সেট করার জন্য আদেশটি (হতে পারে না?) ব্যবহৃত হচ্ছে না? (আমার অর্থ কেন এটি এমনভাবে ডিজাইন করা হয়েছে))
এসজেড।

1
@cxw দুর্ভাগ্যক্রমে, এটি মোটেই সত্য নয়। এর ম্যান পেজ থেকে git checkout: "সূচকগুলিতে বা <tree-ish> এ থাকা সামগ্রীর পরিবর্তে কার্যকারী গাছের পাথগুলিকে ওভাররাইট করুন।" যদি <tree-ish>বাদ দেওয়া হয় তবে সূচীতে যে কোনও বিষয়বস্তু কার্যকারী ট্রি আপডেট করতে ব্যবহৃত হবে। এটি হেড থেকে আলাদা বা নাও হতে পারে।
টুনটাপ

136

মাথা পুনরায় সেট করুন:

একক ফাইলকে হেডে হার্ড রিসেট করতে:

git checkout @ -- myfile.ext

নোট যে @সংক্ষিপ্ত HEAD। গিটের একটি পুরানো সংস্করণ সংক্ষিপ্ত ফর্মটিকে সমর্থন করবে না।

সূচীতে পুনরায় সেট করুন:

হার্ড একটি একক ফাইল রিসেট সূচক সূচক অভিমানী খালি নয় এমন, অন্যথায় মাথা থেকে হল:

git checkout -- myfile.ext

মুল বক্তব্যটি হ'ল নিরাপদ হওয়ার জন্য আপনি কেবল সূচকটিতে পুনরায় সেট করতে না চাইলে আপনি কমান্ড থেকে @বা HEADকমান্ডটি ছাড়তে চান না


1
Myfile.ext এর আগে "-" সাথে কী হবে?
ল্যান্স কিন্ড

3
@ ল্যান্সকাইন্ড হিসাবে আমি বুঝতে পারি, এটি ফাইলের নামের তালিকা অনুসরণ করে যা এটি অনুসরণ করে। এটি ছাড়া, এমন কিছু ক্ষেত্রে রয়েছে যখন গিট আর্গুমেন্টকে ভুলভাবে ব্যাখ্যা করে।
একুম্যানাস

2
শুধু ফাইলের নাম নয়। বিস্তৃত ব্যবহৃত কনভেনশন অনেকগুলি ইউটিলিটিতে অবস্থানগত আর্গুমেন্ট থেকে বিকল্পগুলি পৃথক করে। man bashপৃষ্ঠা দেখুন । এই উত্তরে এটিও
বনিব

1
প্রচলিতভাবে, --প্রোগ্রামটি জানাতে ব্যবহৃত হয় I've finished specifying "options", and from here on, everything will be a positional argument.। প্রচলিতভাবে, "বিকল্পগুলি" হ'ল টোকেনগুলি --recursiveযা কোনও ক্রমে উপস্থিত হতে পারে বা এমনকি তাদের সংক্ষিপ্ত আকারে একত্রিত হতে পারে, এর মতো rm -rf। বিপরীতে, "অবস্থানগত আর্গুমেন্টগুলি" অনেকটা প্রোগ্রামিং ভাষার কোনও ফাংশনে আর্গুমেন্টের মতো হয়: টোকেনের তালিকায় তাদের অবস্থান নির্ধারণ করে যে প্রোগ্রামটি তাদের সাথে ঠিক কী করতে চলেছে (এগুলি প্রায়শই ফাইলের নাম)। --যেটি অস্পষ্টতা সরিয়ে দেয়।
আয়নো


18

যেহেতু গীত 2.23 (আগস্ট 2019) আপনি ব্যবহার করতে পারেন restore( আরো তথ্য ):

git restore pathTo/MyFile

উপরে পুনরুদ্ধার করতে হবে MyFileউপর HEAD(শেষ কমিট) বর্তমান ডালে।

আপনি যদি অন্যান্য প্রতিশ্রুতি থেকে পরিবর্তনগুলি পেতে চান তবে আপনি প্রতিশ্রুতিবদ্ধ ইতিহাসের পিছনে যেতে পারেন। নীচের কমান্ডটি MyFileশেষের চেয়ে দুটি কমিট পাবে । আপনি এখন থেকে -s( --source) বিকল্পটি প্রয়োজন এখন থেকে আপনি উত্স পুনরুদ্ধার হিসাবে (ডিফল্ট) ব্যবহার করেন master~2না master:

git restore -s master~2 pathTo/MyFile

অন্যান্য শাখা থেকেও আপনি ফাইলটি পেতে পারেন!

git restore -s my-feature-branch pathTo/MyFile

1
এখন পর্যন্ত সবচেয়ে সহজ উপায়। দুর্ভাগ্যক্রমে এই উত্তরটি যথেষ্ট মনোযোগ পাচ্ছে না।
সিঙ্গরিয়াম


4

আপনি একক ফাইল পুনরায় সেট করার জন্য নীচের কমান্ডটি ব্যবহার করতে পারেন

git checkout HEAD -- path_to_file/file_name

path_to_file/filenameনীচের কমান্ডটি পেতে সমস্ত পরিবর্তিত ফাইলের তালিকা করুন

git status

1

আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

git reset -- my-file.txt

যা my-file.txtযুক্ত হওয়ার পরে উভয়ের ওয়ার্কিং কপি আপডেট করবে ।


অনুরোধ অনুসারে পরিবর্তিত ফাইলের সামগ্রী পরিবর্তন করে না।
রাফায়েল

আপনি যখন স্ট্যাশে যুক্ত হন আপনি ফাইলটি সম্পাদনা করেছেন?
এডিওয়াইকিউ

1
এটি বিশেষত @ ADDQU পয়েন্ট নয়। প্রশ্নটি কীভাবে কোনও ফাইলকে "হার্ড রিসেট" করবেন, এটি পর্যায়বদ্ধ তালিকা থেকে সরিয়ে না ফেলতে হবে।
রাফায়েল

@ রাফায়েল আপনি সঠিক, তবে আমি আপনাকে জানাতে চাই যে একটি উপায়ও রয়েছে।

0

আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

git checkout filename

আপনার যদি একই ফাইলের নামের সাথে একটি শাখা থাকে তবে আপনাকে এই আদেশটি ব্যবহার করতে হবে:

git checkout -- filename

1
এটি ফাইলটিকে "হার্ড রিসেট" করবে না - এটি কেবল কার্যকারী ট্রিতে সূচী অবস্থার অনুলিপি করে। একটি "হার্ড রিসেট" প্রথমে সূচকটি পুনরায় সেট করে।
এএইচ

-20

গরম জল থেকে আপনাকে বের করার একটি সহজ, সহজ, সহজ উপায়, বিশেষত যদি আপনি গিট নিয়ে এতটা স্বাচ্ছন্দ্য বোধ করেন না:

  1. আপনার ফাইলের লগ দেখুন

    গিট লগ myFile.js

    প্রতিশ্রুতিবদ্ধ 1023057173029091u23f01w276931f7f42595f84f লেখক: কিমিক্লাস তারিখ: মঙ্গলবার 7 আগস্ট 09:29:34 2018 -0400

    JIRA-12345 - নতুন আর্কিটেকচার সহ রিফেক্টর।

  2. ফাইলের নোট হ্যাশ:

    1023057173029091u23f01w276931f7f42595f84f

  3. হ্যাশ ব্যবহার করে ফাইলটি দেখান। আপনি যা চান তা নিশ্চিত করুন:

    গিট শো 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js

  4. একটি স্থানীয় অনুলিপি ফাইল পুনর্নির্দেশ

    গিট শো 1023057173029091u23f01w276931f7f42595f84f:।

  5. আপনার বর্তমান ফাইলটির ব্যাক আপ দিন।

    সিপি myFile.js myFile.bak.js

  6. আপনার প্রিয় পাঠ্য সম্পাদকটিতে দুটি ফাইলই খুলুন।

    vim myFile.js
    vim myFile.07aug2018.js

  7. মাইফাইল.এসএস-এ myFile.07aug2018.js থেকে এন পেস্ট কোডটি অনুলিপি করুন এবং সংরক্ষণ করুন।

  8. প্রতিশ্রুতিবদ্ধ এবং myFile.js ধাক্কা

  9. আবার লগটি দেখুন এবং নিশ্চিত করুন যে আপনার ফাইলটি ঠিক জায়গায় রয়েছে place

  10. আপনার ক্লায়েন্টদের সর্বশেষতম টানতে বলুন, খুশিতে এটি জায়গায় পুরানো সংস্করণটির সাথে কাজ করে দেখুন।

যৌনতম, বা বেশিরভাগ গিটকেন্দ্রিক সমাধান নয় এবং অবশ্যই একটি "ম্যানুয়াল" রিসেট / রিভার্সন নয়, তবে এটি কার্যকর। এর জন্য গিটের ন্যূনতম জ্ঞান প্রয়োজন, এবং প্রতিশ্রুতিবদ্ধ ইতিহাসটি বিরক্ত করে না।


2
এই উত্তরটি বছরের পর বছর সমাধানের যে কোনও সমাধানের চেয়ে অনেক জটিল এবং ত্রুটিযুক্ত।
আর্টিফ 3 এক্স

2
কেন কেউ এই সমাধান ব্যবহার করা উচিত !? আসল উত্তরটি কেবল একটি সাধারণ আদেশ।
মিলাদ রহিমী

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