গিট পথ দিয়ে শক্ত / নরম পুনরায় সেট করতে পারে না কেন?


138

$ git reset -- <file_path> পথে পুনরায় সেট করতে পারেন।

তবে $ git reset (--hard|--soft) <file_path>নীচের মত একটি ত্রুটি রিপোর্ট করবে:

Cannot do hard|soft reset with paths.

উত্তর:


143

কারণ এর কোনও মানে নেই (অন্যান্য কমান্ডগুলি ইতিমধ্যে সেই কার্যকারিতা সরবরাহ করে) এবং এটি দুর্ঘটনাক্রমে ভুল কাজ করার সম্ভাবনা হ্রাস করে।

একটি পাথের জন্য "হার্ড রিসেট" সবেমাত্র git checkout HEAD -- <path>(ফাইলটির বিদ্যমান সংস্করণটি পরীক্ষা করে) দিয়ে সম্পন্ন করা হয়।

কোনও পাথের জন্য একটি নরম পুনরায় সেট করার কোনও অর্থ হয় না।

কোনও পথের জন্য একটি মিশ্র পুনরায় সেট করা যা git reset -- <path>করে।


72
ব্যক্তিগতভাবে, আমি মনে করি git checkout -- <path>হবে প্রতিস্থাপিত সঙ্গে git reset --hard <path>। এটি আরও অনেক কিছু বোঝায় ...
ভার্জেনজট

24
git checkout -- <path>একটি হার্ড রিসেট না; এটি মঞ্চযুক্ত বিষয়বস্তুগুলির সাথে কাজের গাছের সামগ্রীর পরিবর্তে। git checkout HEAD -- <path>কোনও পাথের জন্য হার্ড রিসেট করে, সূচক এবং কার্যকরী গাছ উভয়কেইএইএডিড কমিটের সংস্করণ দিয়ে প্রতিস্থাপন করে।
ড্যান ফাবুলিচ

1
@ এডপ্লুনকেট এর, উত্তরের দ্বিতীয় বাক্যটি আপনাকে জানায় যে অন্যান্য আদেশ কীভাবে কার্যকারিতা সরবরাহ করে।
অ্যাম্বার

16
-1: পুনর্বিবেচনা মোছা ফাইলগুলি রয়েছে বলে যদি চেকআউট করতে হয় বলেছে যে রিভিশনটি ওয়ার্কিং কপি থেকে ফাইলগুলি সরিয়ে ফেলবে না। reset --hardএকটি পথ দিয়ে এই অনুপস্থিত টুকরা সরবরাহ করবে। গিট ইতিমধ্যে এত শক্তিশালী যে "আমরা আপনার নিজের সুরক্ষার জন্য আপনাকে এটি করতে দিই না" অজুহাত শূন্য জল ধারণ করে: "দুর্ঘটনাক্রমে" ভুল কাজ করার প্রচুর উপায় রয়েছে। আপনার যখন যেভাবেই হোক না কেন এটি গুরুত্বপূর্ণ নয় git reflog
void.pointer

1
@ void.pointer চেকআউট দ্বারা উল্লিখিত হিসাবে ফাইলগুলি সরবে না। যদি আপনি সেই আচরণটি চান তবে এই উত্তরটি দেখুন। তবুও, আমি আশা করি কোনও দিন আমরা পেয়ে যাব git reset --hard -- <path>। এটির জন্য বৈধ ব্যবহারের মামলা রয়েছে।
মারিউজ পাভেলস্কি

18

আপনি যা ব্যবহার করে চেষ্টা করছেন তা অর্জন করতে পারেন git checkout HEAD <path>

এটি বলেছিল, প্রদত্ত ত্রুটি বার্তাটি আমার কাছে কোনও ধারণা রাখে না (যেমন git resetসাব-ডাইরেক্টরিগুলিতে ঠিক সূক্ষ্ম কাজ করে), এবং আমি git reset --hardএটি জিজ্ঞাসা করছি ঠিক কী করা উচিত হবে না তার কোনও কারণ আমি দেখতে পাচ্ছি না ।


চেকআউট পর্যায়ক্রমে পরিবর্তনগুলি ব্যবহার করে , যা পুনরায় সেট করার মতো নয়
সাফ্ট

11

ইতিমধ্যে যেভাবে উত্তর দেওয়া হয়েছে প্রশ্নটি , আমি কেন সেই অংশটি ব্যাখ্যা করব ।

তো, গিট রিসেট কী করবে? নির্দিষ্ট পরামিতিগুলির উপর নির্ভর করে, এটি দুটি পৃথক কাজ করতে পারে:

  • আপনি যদি কোনও পথ নির্দিষ্ট করে থাকেন তবে এটি সূচকের সাথে মিলে যাওয়া ফাইলগুলি প্রতিশ্রুতি (ডিফল্টরূপে হেড) থেকে ফাইলগুলির সাথে প্রতিস্থাপন করে। এই ক্রিয়াটি কার্যত গাছকে মোটেই প্রভাবিত করে না এবং সাধারণত গিট অ্যাডের বিপরীতে হিসাবে ব্যবহৃত হয়।

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

    যখন আপনি কোন প্রতিশ্রুতি নির্দিষ্ট করেন না, এটি git reset --softহেডের ডিফল্ট হয়, তাই কিছুই করবে না, কারণ এটি হেডকে হেড করার (এটির বর্তমান অবস্থানে) আদেশ হ'ল। git reset --hardঅন্যদিকে, এর পার্শ্ব প্রতিক্রিয়াগুলির কারণে তা বোঝা যায় , এটি বলছে যে মাথাটি হেডের দিকে সরান এবং সূচি এবং কার্যকারী গাছটিকে হেডে পুনরায় সেট করুন।

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


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

সম্ভবত কারণ সেই কার্যকারিতা (নির্দিষ্ট ফাইলগুলির জন্য কার্যক্ষম গাছ পুনরায় সেট করা) git checkoutকমান্ড হিসাবে ইতিমধ্যে উপলব্ধ ? এবং একই জিনিসটি পুনরায় সেট করা ব্যবহারকারীদের আরও বিভ্রান্ত করবে। আমার উত্তর ছিল যে --hardবিকল্পটি নির্দিষ্ট ফাইলগুলিতে প্রযোজ্য নয় কারণ এটি শাখা পুনরায় সেট করার জন্য একটি মোড, সূচি পুনরায় সেট করার জন্য নয়। এবং ট্রি ট্রি রিসেটের নাম দেওয়া হয়েছে চেকআউট, কারণ আপনি অন্যান্য উত্তরে পড়তে পারেন। এগুলি সবই গিটের ইউজার ইন্টারফেস, আইএমএইচওর একটি খারাপ নকশা।
ব্যবহারকারী 19

প্রথম বিকল্পটির সাথে তুলনা করুন git checkout: git reset --কেবল সূচক সেট করে, যখন git checkout --কেবলমাত্র কার্যক্ষম গাছ সেট করে?
সন্ধানকারী_আফ_ব্যাকন

4

নিশ্চিত করুন যে আপনি উত্স বা উজানের (উত্স) এবং প্রকৃত শাখার মধ্যে স্ল্যাশ রেখেছেন:

git reset --hard origin/branch

অথবা

git reset --hard upstream/branch`

প্রশ্নটি আবার পড়ুন।
জেরুস

3

আছে: পেছনে একটি খুব গুরুত্বপূর্ণ কারণ নীতির checkoutএবংreset

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

ঘুরেফিরে, গিট রিসেটের এই ভূমিকা নেই। নাম সুপারিশ, এটি সাম্প্রতিক সুত্র পুনরায় সেট করবে কিন্তু সবসময় থাকার সংগ্রহস্থলের "নাগালের" স্বাধীনভাবে, একটি উৎস হিসেবে (--soft, --mixed বা --hard)।

সংক্ষিপ্তবৃত্তি:

  • চেকআউট : যে কোনও জায়গা থেকে (সূচক / রেপো প্রতিশ্রুতি) -> কার্যকারী গাছ
  • পুনরায় সেট করুন : রেপো প্রতিশ্রুতি -> ওভাররাইট হেড (এবং optionচ্ছিকভাবে সূচক এবং কার্যক্ষম গাছ)

সুতরাং কিছুটা বিভ্রান্তিকর কারণটি হ'ল git reset COMMIT -- filesযেহেতু "ওভাররাইটিং হেড" কেবলমাত্র কিছু ফাইলই বোঝায় না!

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

সুতরাং কোনওভাবে git reset -- <files>ইতিমধ্যে কিছু ব্যতিক্রমী: এটি হেডকে ওভাররাইট করবে না। আইএমএইচও এই সমস্ত প্রকারের ব্যতিক্রম হবে। এমনকি যদি আমরা কোনও --hardসংস্করণটি ধারণ করতে পারি তবে অন্যরা (উদাহরণস্বরূপ --soft) তা বোঝায় না।


আমি এই উত্তর পছন্দ। সত্যিই, git reset -- <files>এটি যুক্ত হওয়ার মতো পড়ে গিয়েছিল কারণ এটি দরকারী বৈশিষ্ট্য তবে এটি কোন আদেশে রাখা উচিত তা কেউ নিশ্চিত করে না। ভাগ্যক্রমে এখন আমাদের অনেক বেশি বুদ্ধিমান রয়েছে git restoreযার কার্যকারিতা রয়েছে git checkout -- <path> git checkout <commit> -- <path>এবং git reset [<commit>] -- <path>অনেক স্যানার ডিফল্ট এবং এমন আরও অনেকগুলি বৈশিষ্ট্য যা আপনি আগে করতে পারেননি (স্বীকৃত উত্তর যা বলে তার বিপরীতে আপনি অবশেষে সহজেই কেবল কাজ করার গাছটিকে পুনরুদ্ধার করতে পারেন সূচকটি স্পর্শ না করে)।
মারিউজ পাভেলস্কি

0

ব্যাখ্যা

git resetম্যানুয়াল তালিকা আবাহন এর 3 টি উপায়:

  • 2 ফাইল-ভিত্তিক: এগুলি কার্যকরী গাছকে প্রভাবিত করে না , তবে কেবলমাত্র সূচকগুলিতে উল্লিখিত ফাইলগুলিতে কাজ করে <paths>:

    • git reset [-q] [<tree-ish>] [--] <paths>..
    • git reset (--patch | -p) [<tree-ish>] [--] [<paths>...]
  • 1 প্রতিশ্রুতিবদ্ধ-ভিত্তিক: রেফারেন্সযুক্ত সমস্ত ফাইলে পরিচালনা করে <commit>এবং কার্যকারী গাছকে প্রভাবিত করতে পারে:

    • git reset [<mode>] [<commit>]

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

কার্যসংক্রান্ত

যদি আপনি উভয় করতে চান:

  • কোনও ফাইল (গুলি) এর সূচি / ক্যাশে সংস্করণটি পুনরায় সেট করুন
  • ফাইল (গুলি) পরীক্ষা করুন (উদাহরণস্বরূপ, কার্যকারী বৃক্ষটি সূচকের সাথে মিলিত করুন এবং প্রতিশ্রুতিবদ্ধ সংস্করণ করুন)

আপনি আপনার গিট কনফিগারেশন ফাইলটিতে এই উপনামটি ব্যবহার করতে পারেন:

[alias]
  reco   = !"cd \"${GIT_PREFIX:-.}\" && git reset \"$@\" && git checkout \"$@\" && git status --short #"  # Avoid: "fatal: Cannot do hard reset with paths."

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

$ git reco <paths>

$ git reco <branch/commit> <paths>

$ git reco -- <paths>

(জন্য Mnenonic reco: reসেট && cনরক oহিসাবে)


-2

গিট রিসেট --সফট হেড ~ 1 ফাইলের নাম কমিটটি পূর্বাবস্থায় ফেরান তবে পরিবর্তনগুলি স্থানীয় থাকে। ফাইলের নাম হতে পারে - সমস্ত কামিত ফাইলের জন্য


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