আপনি শেষ গিট অ্যাডটি কীভাবে পূর্বাবস্থায় ফিরিয়ে আনতে পারেন?


193

গত নাটক (প্রতিশ্রুতিবদ্ধ নয়) পরিবর্তন unstage কি সম্ভব Git ? ধরুন বর্তমান শাখায় প্রচুর ফাইল ছিল, কিছু স্টেজড ছিল, কিছু ছিল না। কিছু সময়ে, কিছু বোকা প্রোগ্রামার দুর্ঘটনাক্রমে মৃত্যুদন্ড কার্যকর করা হয়েছিল:

git add -- .

...পরিবর্তে:

git checkout -- .

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


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


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

1
প্রথম স্থানে পরীক্ষার আগে সম্ভবত তার / করা / প্রতিশ্রুতিবদ্ধ হওয়া উচিত।
অ্যান্ড্রয়েড.ওয়াসেল

@ android.weasel হ্যাঁ, যে অনেক বছর আগে ছিল ...
Septagram

উত্তর:


299

আপনি ব্যবহার করতে পারেন git reset। এটি আপনার শেষ প্রতিশ্রুতির পরে যুক্ত করা সমস্ত ফাইলকে 'আনস্টেজ' করবে।

আপনি যদি কেবল কয়েকটি ফাইল আনস্টেজ করতে চান তবে ব্যবহার করুন git reset -- <file 1> <file 2> <file n>

এছাড়াও এটি ব্যবহার করে ফাইলের কিছু পরিবর্তন আনস্টেজ করা সম্ভব git reset -p


3
দুঃখজনক. আমার ধারণা, আমার প্রতিশ্রুতিবদ্ধ অভ্যাসগুলিতে কিছু ভুল আছে। এই উত্তরটি গ্রহণ করা, কারণ আপনি -pস্যুইচ উল্লেখ করেছেন । ধন্যবাদ! :)
সেপ্টগ্রাম

(আমার জন্য) ত্রুটি উত্পন্ন করে: মারাত্মক: 'HEAD' বৈধ রেফ হিসাবে সমাধান করতে ব্যর্থ। আমি এখনও কিছু করা হয়নি (নতুন রেপো) সবেমাত্র গিট অ্যাড করেছেন। এবং আফসোস। আমি সম্পূর্ণ অ্যাড, কেবল একটি ডিরেক্টরি পুনরায় সেট করতে চাই না। গিট রিসেট - dir /*.* উপরে ত্রুটি উত্পন্ন করে।
ফ্রান্সিস ডেভি

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

42

আপনি সর্বশেষ গিট অ্যাডটিকে পূর্বাবস্থায় ফিরিয়ে রাখতে পারবেন না তবে addশেষ প্রতিশ্রুতি থেকে আপনি সমস্তগুলি পূর্বাবস্থায় ফিরিয়ে আনতে পারেন । git resetবিনা প্রতিশ্রুতি যুক্তি সূচি পুনরায় সেট করে (স্টেস্ট পরিবর্তনগুলি পর্যায়ক্রমে):

git reset

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

@ অ্যান্ড্রুমায়লান: ভাল, এটি করার কোনও স্বয়ংক্রিয় উপায় নেই । আপনি সর্বদা resetএকটি ফাইল করতে পারেন , বা reset -pএকটি নির্দিষ্ট হুন স্টেস্টেজ করতে ব্যবহার করতে পারেন ।
নিটল

15

তাই আসল উত্তর

এই প্রোগ্রামারটি এখন কিছু জাদুকরী গিট কমান্ড দিয়ে তার শেষ পরিবর্তনগুলি আনস্টেজ করতে পারে?

আসলে: না, আপনি কেবল শেষটি আনস্টেজ করতে পারবেন না git add

আমরা যদি নিম্নলিখিত পরিস্থিতির মতো প্রশ্নের ব্যাখ্যা করি তা হ'ল:

প্রাথমিক ফাইল:

void foo() {

}

main() {
    foo();
}

তারপরে প্রথম পরিবর্তন git add :

void foo(int bar) {
    print("$bar");
}

main() {
    foo(1337);
}

দ্বিতীয় পরিবর্তন এর পরে git add:

void foo(int bar, String baz) {
    print("$bar $baz");
}

main() {
    foo(1337, "h4x0r");
}

এই ক্ষেত্রে, git reset -pসাহায্য করবে না, কারণ এর ক্ষুদ্রতম গ্রানুলারিটি লাইন lines gitএর মধ্যবর্তী অবস্থা সম্পর্কে এটি জানে না:

void foo(int bar) {
    print("$bar");
}

main() {
    foo(1337);
}

আর কোন।


আমি যুক্ত হয়েছি কারণ একজন নতুন গিট ব্যবহারকারী হিসাবে, এটি একটি সত্যই গুরুত্বপূর্ণ পার্থক্য যা আমার বন্ধুরা "ভাল চেকিন স্বাস্থ্যকরন" হিসাবে বর্ণনা করে তা তুলে ধরে ... আমার ব্যক্তিগত অভিজ্ঞতা - এটি "কার্পুলিং" (খারাপ!) হিসাবে বর্ণনা করা হয়েছিল।
বেনস


3

তারিখে গিট অনুরোধ জানায়:

  1. use "git rm --cached <file>..." to unstageফাইলগুলি রেপোতে না থাকলে। এটি ফাইলগুলি সেখানে রাখে তা আনস্টেজ করে।
  2. use "git reset HEAD <file>..." to unstageযদি ফাইলগুলি রেপোতে ছিল এবং আপনি সেগুলি সংশোধিত হিসাবে যুক্ত করছেন। এটি ফাইলগুলি যেমন আছে তেমন রাখে এবং সেগুলি আনস্টেজ করে।

আমার জ্ঞান অনুযায়ী আপনি git add --এটিকে পূর্বাবস্থায় ফিরিয়ে আনতে পারবেন না তবে আপনি উপরে উল্লিখিত ফাইলগুলির একটি তালিকা আনস্টেজ করতে পারবেন।


2
  • সূচী থেকে ফাইলটি সরিয়ে ফেলুন, তবে এটির সংস্করণে রাখুন এবং কার্যকরী অনুলিপিতে অনির্দিষ্ট পরিবর্তনের সাথে রেখে দিন:

    git reset head <file>
    
  • পরিবর্তনগুলি পূর্বাবস্থায়িত করে সূচি থেকে অপসারণ করে, হেড থেকে শেষ অবস্থায় ফাইলটি পুনরায় সেট করুন:

    git reset HEAD <file>
    git checkout <file>
    
    # If you have a `<branch>` named like `<file>`, use:
    git checkout -- <file>

    git reset --hard HEADএকক ফাইল নিয়ে কাজ করবে না বলে এটি প্রয়োজন ।

  • <file>কাজের অনুলিপি পরিবর্তনের সাথে আন সংস্করণযুক্ত ফাইল রেখে সূচি এবং সংস্করণ থেকে সরান :

    git rm --cached <file>
    
  • <file>কাজের অনুলিপি এবং সংস্করণ সম্পূর্ণরূপে সরান :

    git rm <file>
    

2

যদি আপনি সমস্ত যুক্ত ফাইলগুলি কমিটের জন্য গিট থেকে সরাতে চান

git reset

আপনি যদি একটি পৃথক ফাইল অপসারণ করতে চান

git rm <file>

1

তুমি ব্যবহার করতে পার

git reset

সম্প্রতি যুক্ত স্থানীয় ফাইলগুলিকে পূর্বাবস্থায় ফেরাতে

 git reset file_name

একটি নির্দিষ্ট ফাইলের পরিবর্তনগুলি পূর্বাবস্থায়িত করতে


0

সমস্যার আকার এবং স্কেলের উপর নির্ভর করে আপনি একটি স্ক্র্যাচ (অস্থায়ী) শাখা তৈরি করতে এবং সেখানে বর্তমান কাজটি কমিট করতে পারেন।

তারপরে আপনার মূল শাখায় স্যুইচ করুন এবং চেকআউট করুন এবং স্ক্র্যাচ কমিট থেকে উপযুক্ত ফাইলগুলি চয়ন করুন।

কমপক্ষে আপনার কাছে কাজ করার জন্য বর্তমান এবং পূর্ববর্তী রাজ্যের স্থায়ী রেকর্ড থাকবে (যতক্ষণ না আপনি সেই স্ক্র্যাচ শাখাটি মুছবেন)।

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