git - প্লেইন ইংরেজীতে, "গিট রিসেট" কি করে?



reset (7)

আমি git reset সম্পর্কে subtleties ব্যাখ্যা আকর্ষণীয় পোস্ট দেখা যায়।

দুর্ভাগ্যবশত, আমি যতটা পড়ি, ততই মনে হয় যে আমি সম্পূর্ণরূপে বুঝতে পারছি না। আমি একটি এসভিএন ব্যাকগ্রাউন্ড থেকে আসা এবং গিট একটি সম্পূর্ণ নতুন রূপান্তর। আমি সহজে mercurial পেয়েছিলাম, কিন্তু গিট অনেক বেশি প্রযুক্তিগত।

আমি মনে করি git reset hg revert বন্ধ, কিন্তু এটা পার্থক্য আছে বলে মনে হয়।

তাই ঠিক কি git reset করবেন না? সম্পর্কে বিস্তারিত ব্যাখ্যা অন্তর্ভুক্ত করুন:

  • বিকল্পগুলি - --soft , --soft এবং --merge ;
  • HEAD^ এবং HEAD~1 হিসাবে HEAD^ সহ আপনার ব্যবহৃত অদ্ভুত উল্লেখটি;
  • কংক্রিট ব্যবহার ক্ষেত্রে এবং কাজ প্রবাহ;
  • কাজের অনুলিপি, HEAD এবং আপনার বিশ্বব্যাপী চাপ স্তরের ফলাফল।

Answers

ব্লগ প্রো গিট ব্লগে পোস্ট রিমেট git reset এবং git checkout উপর একটি খুব নো-brainer ব্যাখ্যা দেয়।

সেই পোস্টের শীর্ষে থাকা সমস্ত সহায়ক আলোচনার পরে, লেখক নিম্নলিখিত তিনটি ধাপে নিয়মগুলি হ্রাস করে:

যে মূলত এটা। reset কমান্ডটি এই তিনটি গাছকে একটি নির্দিষ্ট ক্রমের উপর ওভাররাইট করে, আপনি যখন এটি বলবেন তখন বন্ধ হবে।

  1. HEAD নির্দেশ করে যে কোন শাখা সরান ( --soft বন্ধ করুন)
  2. তারপরে, ইন্ডেক্সটিকে এভাবে দেখান (যদি না - এখানে থাকা বন্ধ করুন)
  3. তারপরে, ওয়ার্কিং ডিরেক্টরীটিকে এভাবে দেখান

সেখানে রয়েছে --merge এবং --keep বিকল্প, তবে আমি এখনকার জন্য জিনিসগুলিকে আরও সহজ রাখব - এটি অন্য নিবন্ধের জন্য হবে।


আপনি গিট কিছু করতে কমিট যখন আপনি প্রথমে আপনার পরিবর্তন (সূচক যোগ করুন) আপনার পরিবর্তন আছে। এর অর্থ এই যে আপনি যে সমস্ত ফাইলটি এই কমিটিতে অন্তর্ভুক্ত করতে চান সেগুলিকে যোগ করার জন্য জিটটি জিট করতে হবে। আসুন প্রথমে একটি গিট রেপো এর চিত্রটি দেখি:

তাই, এখন তার সহজ। আমরা কাজ ডিরেক্টরি, ফাইল, ডিরেক্টরি এবং সব তৈরি কাজ করতে হবে। এই পরিবর্তনগুলি অপ্রচলিত পরিবর্তন। তাদের ট্র্যাক করার জন্য, git add কমান্ডটি ব্যবহার করে আমরা সূচীকে জিট করতে তাদের যুক্ত করতে হবে। একবার তারা গিট সূচক যোগ করা হয়। আমরা এখন এই পরিবর্তনগুলি করতে পারি, যদি আমরা এটি রিপোজিটরিতে আটকাতে চাই।

কিন্তু হঠাৎ আমরা জানতে পেরেছিলাম যে আমাদের কাছে একটি অতিরিক্ত ফাইল রয়েছে যা আমরা সূচীতে যোগ করেছি, এটি গিট রিপোজিটরিতে ধাক্কা দেয় না। এর মানে আমরা ইন্ডেক্সে সেই ফাইলটি চাই না। এখন প্রশ্ন হচ্ছে জিট ইন্ডেক্স থেকে যে ফাইলটি সরাতে হবে, যেহেতু আমরা তাদের ইনডেক্সে রাখতে গিট অ্যাড ব্যবহার করেছি তাই এটি জিআইটি আরএম ব্যবহার করার জন্য লজিক্যাল হবে? ভুল! git rm কেবল ফাইলটি মুছে ফেলবে এবং সূচীতে মুছে ফেলা হবে। তাহলে এখন কি করতে হবে:

ব্যবহার করুন: -

জিট রিসেট

এটা আপনার সূচী মুছে ফেলা, আপনার কাজ ডিরেক্টরি untouched ছেড়ে। (সহজভাবে unstaging সবকিছু)।

এটি সঙ্গে বিকল্প সংখ্যা সঙ্গে ব্যবহার করা যেতে পারে। জিট রিসেটের সাথে ব্যবহার করার জন্য তিনটি প্রধান বিকল্প রয়েছে : --হার্ড, --সফট এবং - মিশ্র । এটি রিসেট করার সময় HEAD পয়েন্টার ছাড়া কি রিসেট হয় তা প্রভাবিত করে।

প্রথম, - হার্ড সবকিছু রিসেট। আপনি যদি সেই শাখাটি বরাবরই অনুসরণ করতেন তবে আপনার বর্তমান ডিরেক্টরিটি ঠিক হবে। কাজ ডিরেক্টরি এবং সূচক যে কমিট পরিবর্তন করা হয়। এটি এমন সংস্করণ যা আমি প্রায়শই ব্যবহার করি। গিট রিসেট - হার্ট ফিরে svn ভালো কিছু।

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

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

গিট ফিরে এবং গিট রিসেট মধ্যে পার্থক্য : -

সহজ ভাষায়, জিট রিসেট "ফিক্স-অমিমেট ভুল" কমান্ড এবং গিট রিভার্ট "ফিক্স-কমেড ভুল" কমান্ড।

এর অর্থ হল যদি আমরা কিছু পরিবর্তন করে কিছু ত্রুটি করেছি এবং জিপি রেপোতে একই push করে push করি, তাহলে গিট রিভার্ট হল সমাধান। এবং যদি আমরা pushing / commiting আগে একই ত্রুটি চিহ্নিত করেছি, আমরা সমস্যাটি সমাধানের জন্য গিট রিসেট ব্যবহার করতে পারি।

আমি এটা আপনার বিভ্রান্তি পরিত্রাণ পেতে সাহায্য করবে আশা করি।


চেকআউট একটি নির্দিষ্ট কমিটিতে মাথা নির্দেশ করে।

একটি নির্দিষ্ট কমিটিতে একটি শাখা পয়েন্ট রিসেট করুন। (একটি শাখা একটি কমিট একটি পয়েন্টার।)

ঘটনাক্রমে, যদি আপনার মাথা একটি শাখা নির্দেশ করে না যে একটি শাখা দ্বারা নির্দেশিত হয় তারপর আপনার একটি বিচ্ছিন্ন মাথা আছে। (ভুল হতে পরিণত। মন্তব্য দেখুন ...)


সাধারণভাবে, git reset ফাংশনটি বর্তমান শাখাটি নিতে এবং এটি অন্য কোথাও বিন্দুতে পুনরায় সেট করা এবং সম্ভবত সূচী এবং কাজ গাছটি বরাবর আনতে হয়। আরো concretely, যদি আপনার মাস্টার শাখা (বর্তমানে চেক আউট) এই মত হয়:

- A - B - C (HEAD, master)

এবং আপনি বুঝতে পারেন যে আপনি মাস্টারকে বি, সি-তে নির্দেশ করতে চান না, আপনি এটিতে স্থানান্তর করতে git reset B ব্যবহার করবেন:

- A - B (HEAD, master)      # - C is still here, but there's no branch pointing to it anymore

ডিগ্রেশন: এটি একটি চেকআউট থেকে ভিন্ন। আপনি যদি git checkout B চালাতে চান তবে আপনি এটি পেতে পারেন:

- A - B (HEAD) - C (master)

আপনি একটি বিচ্ছিন্ন HEAD রাষ্ট্র শেষ হয়ে গেছে। HEAD , কাজ গাছ, সমস্ত ম্যাচ B সূচক, কিন্তু মাস্টার শাখা C এ পিছনে বাকি ছিল। আপনি যদি এই মুহুর্তে একটি নতুন কমিটি D করেন, তবে আপনি এটি পাবেন যা সম্ভবত আপনি চান না:

- A - B - C (master)
       \
        D (HEAD)

মনে রাখবেন, রিসেট কাজ করে না, এটি একটি শাখা আপডেট করে (যা একটি কমিট করার জন্য পয়েন্টার হয়) একটি ভিন্ন commit নির্দেশ করে। বিশ্রাম আপনার সূচক এবং কাজ গাছ কি ঘটনার ঠিক বিবরণ।

ব্যবহারের ক্ষেত্রে

আমি পরবর্তী বিভাগে বিভিন্ন বিকল্পগুলির আমার বর্ণনাগুলির মধ্যে git reset জন্য প্রধান ব্যবহারের ক্ষেত্রে অনেকগুলি আবরণ করি। এটি সত্যিই বিভিন্ন ধরনের জন্য ব্যবহার করা যেতে পারে; সাধারণ থ্রেড হল যে তাদের মধ্যে সমস্ত একটি প্রদত্ত কমিট / পয়েন্ট মিলতে শাখা, সূচক, এবং / অথবা কাজ গাছ পুনরায় সেট অন্তর্ভুক্ত।

জিনিস সতর্কতা অবলম্বন করা

  • --hard আপনি সত্যিই কাজ হারান হতে পারে। এটা আপনার কাজ গাছ সংশোধন করে।

  • git reset [options] commit আপনি (সাজানোর) commits হারান হতে পারে। উপরে খেলনা উদাহরণ, আমরা C হারান। এটি এখনও git reflog show HEAD এবং আপনি এটি git reflog show HEAD বা git reflog show master মাধ্যমে এটি খুঁজে পেতে পারেন তবে এটি কোনও শাখা থেকে আসলে অ্যাক্সেসযোগ্য নয়।

  • Git স্থায়ীভাবে 30 দিনের পরে এই ধরনের বিলোপগুলি মুছে ফেলবে, তবে তারপরে আপনি আবার এটিতে একটি শাখা নির্দেশ করে C পুনরুদ্ধার করতে পারেন ( git checkout C; git branch <new branch name> )।

আর্গুমেন্ট

ম্যান পৃষ্ঠাটি প্যারাফ্রিজিং, ফরম git reset [<commit>] [paths...] সর্বাধিক সাধারণ ব্যবহার, যা প্রদত্ত পদক্ষেপগুলি থেকে প্রদত্ত পথগুলিকে তাদের রাষ্ট্রগুলিতে পুনরায় সেট করবে। যদি পাথ সরবরাহ না করা হয় তবে পুরো গাছটি পুনরায় সেট করা হয় এবং যদি কমিটি সরবরাহ করা না হয় তবে এটি হাইড (বর্তমান কমিট) হতে পারে। এটি গিট কমান্ডগুলির মধ্যে একটি সাধারণ প্যাটার্ন (উদাহরণস্বরূপ চেকআউট, ডিফ, লগ, যদিও সঠিক শব্দটি পরিবর্তিত হয়), তাই এটি খুব বিস্ময়কর হওয়া উচিত নয়।

উদাহরণস্বরূপ, git reset other-branch path/to/foo টিপসটি অন্য শাখা, git reset -- . / থেকে / foo এটিকে git reset -- . বর্তমান ডিরেক্টরিটি HEAD- এ তার অবস্থানে রিসেট করে এবং একটি সরল git reset HEAD এর প্রতিটি অবস্থানে সবকিছু রিসেট করে।

প্রধান কাজ গাছ এবং সূচক অপশন

রিসেট সময় আপনার কাজ গাছ এবং সূচক কি ঘটতে নিয়ন্ত্রণ করতে চার প্রধান অপশন আছে।

মনে রাখবেন, সূচীটি গিট এর "স্টেজিং এলাকা" - এটি যেখানে আপনি git add করার প্রস্তুতিতে git add করেন সেখানে জিনিসগুলি চলে।

  • --hard সবকিছু আপনি রিসেট করেছি --hard মেলে। এই সম্ভবত, বুঝতে সহজ। আপনার স্থানীয় পরিবর্তন সব clobbered পেতে। একটি প্রাথমিক ব্যবহার আপনার কাজকে উড়িয়ে দিচ্ছে তবে স্যুইচিং স্যুইচ করছে না: git reset --hard মানে git reset --hard HEAD , অর্থাত শাখাটি পরিবর্তন করবেন না কিন্তু সমস্ত স্থানীয় পরিবর্তনগুলি পরিত্রাণ পান। অন্যটি সহজেই এক শাখা থেকে অন্য জায়গায় একটি শাখা সরানো এবং সিঙ্কে সূচী / কাজ গাছ পালন করা হয়। এটি এমন এক যা আসলেই আপনার কাজটি হারাতে পারে, কারণ এটি আপনার কাজের গাছকে সংশোধন করে। আপনি যে কোনও reset --hard চালানোর আগে স্থানীয় কাজটি নিক্ষেপ করতে চান তা নিশ্চিত হন।

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

  • --soft সূচক বা কাজ গাছ স্পর্শ না। আপনার সমস্ত ফাইলগুলি --mixed অবস্থায় অক্ষত রয়েছে তবে সমস্ত পরিবর্তনগুলি গিট স্ট্যাটাসের সাথে changes to be committed হিসাবে দেখায় (অর্থাত্ প্রস্তুতির প্রস্তুতিতে চেক করা হয়েছে)। যখন আপনি বুঝতে পারছেন যে আপনি কিছু খারাপ কাজ করেছেন তবে কাজটির সব ভাল - আপনাকে যা করতে হবে তা ভিন্নভাবে এটির জন্য সুপারিশ করা। সূচীটি অপ্রচলিত, তাই আপনি যদি তা চান তবে তা অবিলম্বে করতে পারেন - ফলে রিসেটটি পুনরায় সেট করার আগে আপনি যেখানে ছিলেন সেখানে একই একই সামগ্রী থাকবে।

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

    আরো কংক্রিট হতে, অনুমান করুন যে আপনি ফাইলগুলি A এবং B সংশোধন করেছেন এবং আপনি একটি শাখায় মার্জ করার চেষ্টা করছেন যা ফাইল সি এবং ডি সংশোধন করে। কোনো কারণে মজিল ব্যর্থ হয় এবং আপনি এটি বাতিল করার সিদ্ধান্ত নেন। আপনি git reset --merge ব্যবহার করুন git reset --merge । এটি C এবং D কে HEAD এ কীভাবে ফিরে এসেছে তা নিয়ে আসে, তবে এটি কেবলমাত্র A এবং B এ আপনার পরিবর্তনগুলি ছেড়ে দেয়, কারণ এটি প্রয়াসকৃত একত্রীকরণের অংশ নয়।

আরো জানতে চান?

আমি মনে করি man git reset আসলেই এর জন্য বেশ ভাল - সম্ভবত আপনি তাদের জন্য কিছুটা প্রয়োজন বোধ করেন যদিও তাদের জন্য গিট আসলেই সঙ্কুচিত হয়ে থাকে। বিশেষ করে, আপনি যদি সময়টি সাবধানে পড়তে সময় নেন, তবে সূচী এবং কাজের গাছের ফাইলগুলির তালিকাগুলি বর্ণনা করে এমন সমস্ত টেবিলগুলি বিভিন্ন বিকল্প এবং ক্ষেত্রে খুব সহায়ক। (কিন্তু হ্যাঁ, তারা খুব ঘন - তারা খুব সংক্ষিপ্ত আকারে উপরে তথ্য একটি ভয়ানক প্রচুর conveying করছি।)

অদ্ভুত নোট

"অদ্ভুত নোটেশন" ( HEAD^ এবং HEAD~1 ) আপনি উল্লেখ করেছেন যে 3ebe3f6 মত হ্যাশের নাম ব্যবহার না করেই কেবল 3ebe3f6 নির্দিষ্ট করার জন্য একটি 3ebe3f6 । এটি পুরোপুরি উদাহরণ এবং সম্পর্কিত সিনট্যাক্স সহ, গিট-রিভিউ-পার্সের জন্য ম্যান পৃষ্ঠাটির "নির্দিষ্টকরণ পুনর্বিবেচনা" বিভাগে সম্পূর্ণরূপে ডকুমেন্ট করা হয়েছে। কের্ট এবং টিলেড আসলে বিভিন্ন জিনিস বোঝায়:

  • HEAD~ HEAD~1 জন্য সংক্ষিপ্ত এবং এর অর্থ প্রথম পিতামাতা। HEAD~2 অর্থটি প্রথম পিতামাতার প্রথম পিতামাতার অর্থ। "HEAD এর আগে কমিটি করা হয়" বা "HEAD এর নবম প্রজন্মের পূর্বপুরুষ" হিসাবে HEAD~n মনে করুন।
  • HEAD^ (বা HEAD^1 ) এছাড়াও কমিটির প্রথম পিতামাতা মানে। HEAD^2 দ্বিতীয় পিতামাতা মানে। মনে রাখবেন, একটি স্বাভাবিক একত্রীকরণ কমিটির দুটি পিতামাতা থাকে - প্রথম পিতামাতাটি একত্রিত হয়ে থাকে এবং দ্বিতীয় পিতা-মাতা হল একত্রিত হওয়া অঙ্গীকার। সাধারণত, মার্জ আসলে ইচ্ছাকৃতভাবে অনেক অভিভাবক থাকতে পারে (অক্টোপাস মার্জেস)।
  • ^~ অপারেটরগুলিকে একত্রিত করা যেতে পারে, যেমন HEAD~3^2 , HEAD~3^2 এর তৃতীয় প্রজন্মের পূর্বপুরুষের দ্বিতীয় পিতা, HEAD^^2 , HEAD^^2 এর প্রথম পিতামাতার দ্বিতীয় পিতামাতা বা এমনকি HEAD^^^ , যা HEAD~3 সমতুল্য।


টি এল; ডিআর

git reset রিসেট শেষ কমিট স্টেজিং। শেষ কাজের জন্য আপনার ওয়ার্কিং ডিরেক্টরীতে ফাইল রিসেট করার জন্য - ব্যবহার করুন।

দীর্ঘ সংস্করণ

কিন্তু এটা স্পষ্টতই সহজলভ্য, তাই অনেকগুলি শব্দের উত্তর। পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনা প্রসঙ্গে git reset পড়ার জন্য এটি আমার আরও অর্থবহ। যেমন এটি দেখুন:

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

https://www.atlassian.com/git/tutorials/undoing-changes/git-reset থেকে

এবং এই

কমিট-লেভেলে, রিসেটিং একটি শাখার টিপকে বিভিন্ন কমিটিতে স্থানান্তর করার একটি উপায়। এই বর্তমান শাখা থেকে commits অপসারণ করতে ব্যবহার করা যেতে পারে।

https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting/commit-level-operations থেকে


সচেতন থাকুন, এটি একটি জটিল ব্যাখ্যা যা এই জটিল কার্যকারিতাটি বুঝতে চাইলে প্রথম ধাপ হিসাবে বিবেচিত।

চাক্ষুষ শিক্ষার্থীদের জন্য সহায়ক হতে পারে যারা এই প্রকল্পগুলির প্রতিটির পরে তাদের প্রোজেক্ট অবস্থা কেমন দেখায় তা কল্পনা করতে চান:

রং দিয়ে টার্মিনাল ব্যবহার যারা যারা জন্য (জিটি কনফিগারেশন - গ্লোবাল color.ui স্বয়ংক্রিয়):

git reset --soft A এবং আপনি সবুজ এবং বি সি এর স্টাফ দেখতে পাবেন (স্টেজড এবং কমিট করার জন্য প্রস্তুত)

git reset --mixed A (বা git reset A ) এবং আপনি B এবং C এর স্টাফগুলি লাল দেখতে পাবেন (অস্থায়ী এবং স্টেজযুক্ত (সবুজ) করতে প্রস্তুত এবং তারপর প্রতিশ্রুতিবদ্ধ)

git reset --hard A এবং আপনি আর বি এবং সি এর পরিবর্তনগুলি আর দেখতে পাবেন না (যেমন তারা কখনও বিদ্যমান ছিল না)

অথবা যারা 'টাওয়ার' বা 'উত্সট্রি' মত একটি GUI প্রোগ্রাম ব্যবহার করেন

git reset --soft A এবং আপনি ' git reset --soft A ফাইলস' এলাকায় সি এবং সি এর স্টাফ দেখতে পাবেন

git reset --mixed A (বা git reset A ) এবং আপনি 'unstaged ফাইল' অঞ্চলে B এবং C এর স্টাফগুলিকে স্টেজে স্থানান্তরিত করতে প্রস্তুত এবং তারপর প্রতিশ্রুতিবদ্ধ দেখতে পাবেন।

git reset --hard A এবং আপনি আর বি এবং সি এর পরিবর্তনগুলি আর দেখতে পাবেন না (যেমন তারা কখনও বিদ্যমান ছিল না)


জেফমি এর সমাধানগুলির অতিরিক্ত বিকল্প

Jefromi এর সমাধান অবশ্যই সেরাতম , এবং আপনি অবশ্যই তাদের ব্যবহার করা উচিত। যাইহোক, সম্পূর্ণতার জন্য, আমি এই বিকল্প বিকল্পগুলিও দেখাতে চেয়েছিলাম যা একটি কমিট ফিরিয়ে আনতে ব্যবহার করা যেতে পারে (এই অর্থে যে আপনি একটি নতুন কমিটি তৈরি করেছেন যা পূর্ববর্তী কমিটিতে পরিবর্তনগুলিকে অদলবদল করে , ঠিক যেমনটি git revert করে) ।

স্পষ্ট হতে, এই বিকল্পগুলি প্রত্যাবর্তন করার সেরা উপায় নয় , জেরফমি এর সমাধানগুলি আছে , তবে আমি কেবল বলতে চাই যে আপনি একই পদ্ধতিটি git revert প্রত্যাহারের জন্য একই পদ্ধতিগুলি ব্যবহার করতে পারেন।

বিকল্প 1: হার্ড এবং নরম রিসেট

গিটের এসএএইচএ হ্যাশের একটি কমিটিতে ফিরে যাওয়ার জন্য চার্লস বেইলিয়ের সমাধানটি খুব সামান্য সংশোধিত সংস্করণ ? :

# Reset the index to the desired commit
git reset --hard <commit>

# Move the branch pointer back to the previous HEAD
git reset --soft [email protected]{1}

# Commit the changes
git commit -m "Revert to <commit>"

এটি মূলত এটি ব্যবহার করে কাজ করে যা নরম রিসেট সূচী / স্টেজিং-এরিয়াতে পূর্ববর্তী কমিটির অবস্থান ছেড়ে দেবে, যা আপনি পরে করতে পারেন।

বিকল্প 2: বর্তমান গাছটি মুছে দিন এবং নতুন একটিকে প্রতিস্থাপন করুন

এই সমাধানটি সুইচ এর সমাধান থেকে চেকআউট পুরানো কমিট থেকে আসে এবং এটি একটি নতুন কমিটি তৈরি করে :

git rm -r .
git checkout <commit> .
git commit

একইভাবে বিকল্প # 1 থেকে, এটি <commit> বর্তমান কাজ কপি অবস্থায় পুনঃপ্রবর্তন করে। প্রথমে git rm করতে হবে কারণ git checkout <commit> থেকে যে ফাইলগুলি যুক্ত করা হয়েছে তা সরিয়ে দেবে না।





git reset