গিট রিভার্ট, চেকআউট এবং রিসেটের মধ্যে পার্থক্য কী?


273

আমি কিভাবে পূর্বে অবস্থায় রোলব্যাক ফাইল এবং প্রকল্প পুনঃস্থাপন বা, মধ্যে পার্থক্য বুঝতে পারছি না শিখতে চেষ্টা করছি git revert, checkoutএবং reset। আপাতদৃষ্টিতে একই উদ্দেশ্যে আপাতত 3 টি পৃথক আদেশ রয়েছে এবং যখন কেউ একজনকে অন্যের থেকে বেছে নেওয়া উচিত?

উত্তর:


461

এই তিনটি আদেশের সম্পূর্ণ ভিন্ন উদ্দেশ্য রয়েছে have তারা এমনকি দূরবর্তী অনুরূপ নয়।

git revert

এই কমান্ডটি একটি নতুন প্রতিশ্রুতি তৈরি করে যা পূর্ববর্তী কমিট থেকে পরিবর্তনগুলি পূর্বাবস্থায় ফেলে। এই কমান্ডটি প্রকল্পটিতে নতুন ইতিহাস যুক্ত করেছে (এটি বিদ্যমান ইতিহাসকে পরিবর্তন করে না)।

git checkout

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

git reset

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

এই কমান্ড ব্যবহার করে

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

আপনি যদি আপনার কার্যক্ষম গাছের মধ্যে কোনও ফাইল পরিবর্তন করে থাকেন তবে পরিবর্তনের প্রতিশ্রুতি না রাখেন, তবে আপনি git checkoutফাইলটির একটি নতুন-সংগ্রহস্থল অনুলিপিটি চেকআউট করতে ব্যবহার করতে পারেন।

যদি আপনি কোন অঙ্গীকারবদ্ধ হয়ে থাকেন তবে অন্য কারও সাথে ভাগ করে না নিলে এবং আপনি সিদ্ধান্ত নিতে চান যে আপনি এটি চান না, তবে আপনি git resetইতিহাসটি পুনরায় লেখার জন্য ব্যবহার করতে পারেন যাতে দেখে মনে হয় যে আপনি কখনও এই প্রতিশ্রুতি করেন নি।

এগুলি সম্ভাব্য ব্যবহারের কিছু দৃশ্য ari অন্যান্য কমান্ড রয়েছে যা কিছু পরিস্থিতিতে কার্যকর হতে পারে এবং উপরের তিনটি কমান্ডের অন্যান্য ব্যবহারও রয়েছে।


13
সুতরাং তিনটি কমান্ড কিছু কাজ শেষ করতে ব্যবহৃত হতে পারে যার অর্থ তারা এতটা "সম্পূর্ণ আলাদা" নয়। একই ধারণা, বিভিন্ন প্রসঙ্গে।
ব্রুনো সান্টোস

16
@ ব্রুনোসান্টোস: মোমবাতি স্টিকস, সিসা পাইপ, ছোরা এবং দড়ি সবই মানুষ খুন করার জন্য ব্যবহার করা যেতে পারে, তবে এর অর্থ এই নয় যে এই জিনিসগুলির মধ্যে কোনওটি বিশেষভাবে সাদৃশ্যপূর্ণ।
ড্যান ছাঁচনির্মাণ

12
@ ড্যান মাউন্ডিং - প্রকৃতপক্ষে এমন অনেকগুলি ঘটনা রয়েছে যেখানে ঠিক একই জিনিস করতে পারে git resetএবং git checkoutকরতে পারে can এগুলি "দূরবর্তী দিক থেকেও অনুরূপ নয়" বলা কেবলমাত্র অত্যুক্তি অত্যুক্তি নয়: এটি এমনকি দূরবর্তীভাবে সত্যও নয়। এই দুটি কমান্ড অনেকগুলি বিভিন্ন জিনিস করতে পারে, যার কয়েকটি সম্পূর্ণরূপে ওভারল্যাপ হয়। উদাহরণ: git reset --hardএবং git checkout -- .ঠিক একই জিনিসটি করবে। এবং যুক্তিযুক্তভাবে বলতে, git reset --hard <path>এবং git checkout <path>ঠিক একই জিনিস করা উচিত - গিট তবে আপনাকে এটি করতে বাধা দেয়। এই দুটি কমান্ড বিভ্রান্ত করা খুব সহজ।
ড্যানগার্ডন

5
@ ড্যানগোর্ডন আমি বুঝতে পারি যে আমাদের সম্ভবত এখানে মতামতের একটি ভিন্নতা থাকবে। তবুও, আমি মনে করি আমার কিছু ব্যাখ্যা দেওয়া উচিত। আপনি ঠিক git reset --hard <path>যেমন করতে পারেন git checkout <path>ঠিক তেমন আপনি করতে পারবেন না কারণ দুটি কমান্ড সম্পূর্ণ ভিন্ন কিছু করে । git resetগিটকে হেডকে একটি পৃথক প্রতিশ্রুতিতে স্থানান্তরিত করতে বলে। git checkoutঅন্যদিকে গিটকে হেডের সাথে কিছু করার জন্য মোটেই জিজ্ঞাসা করে না। এটি হেড একা ফেলে দেয় এবং কেবল একটি ফাইল পরীক্ষা করে। হ্যাঁ, আপনি এগুলি এমনভাবে তৈরি করতে পারেন যাতে তাদের একই রকম প্রভাব থাকে। তবে তারা আসলে যা করে তা সম্পূর্ণ আলাদা।
ড্যান মোল্ডিং

46

ধরা যাক আপনার কমিট করেছেন:

C
B
A

git revert B, এমন একটি প্রতিশ্রুতি তৈরি করবে যা পূর্বে পরিবর্তিত হয় B

git revert A, এমন একটি প্রতিশ্রুতি তৈরি করবে যা পরিবর্তিত অবস্থায় পূর্বাবস্থায় ফিরে আসে তবে পরিবর্তনের ক্ষেত্রে Aস্পর্শ করবে নাB

মনে রাখবেন যে পরিবর্তনগুলি যদি পরিবর্তিত Bপরিবর্তনের উপর নির্ভরশীল হয় Aতবে এর রিভার্ট করা Aসম্ভব নয়।

git reset --soft A, প্রতিশ্রুতিবদ্ধ ইতিহাস এবং সংগ্রহস্থল পরিবর্তন করবে; মঞ্চায়ন এবং কার্যকারী ডিরেক্টরি এখনও স্থিতিতে থাকবে C

git reset --mixed A, প্রতিশ্রুতিবদ্ধ ইতিহাস, সংগ্রহশালা এবং মঞ্চ পরিবর্তন করবে; ওয়ার্কিং ডিরেক্টরি এখনও অবস্থায় থাকবে C

git reset --hard A, প্রতিশ্রুতিবদ্ধ ইতিহাস, সংগ্রহশালা, মঞ্চায়ন এবং কার্যকারী ডিরেক্টরি পরিবর্তন করবে; আপনি Aসম্পূর্ণরূপে ফিরে যেতে হবে ।


1
এত স্বজ্ঞাত উত্তর .. চেকআউট সম্পর্কে কীভাবে
এমজে স্টুডিও

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

7
আমি বিশ্বাস করি আপনি "গিট রিসেট" সম্পর্কে ভুল। "গিট রিসেট" আপনার হেডকে পূর্বের একটি কমিটের সাথে পুনরায় সেট করে, এটি আপনার কার্যকরী ডিরেক্টরিটি পুনরায় সেট করে না। ওয়ার্কিং ডিরেক্টরিটি "গিট চেকআউট [ফাইলের নাম]" দ্বারা "রিসেট" হয়
luigi7up

11
git reset --softকেবলমাত্র হেডকে git reset --hardপুনরায় সেট করে, হেড এবং আপনার কার্যকরী ডিরেক্টরি পুনরায় সেট করে।
এহরিক

গিট রিসেট
মিক্সড

21
  • git checkout আপনার কাজের গাছ পরিবর্তন করে,
  • git reset আপনি যে শাখার দিকে ইঙ্গিত করছেন সেটিকে পরিবর্তন করে
  • git revert পূর্বাবস্থায় ফিরে আসা পরিবর্তনগুলি যুক্ত করে।

4
git reset কোনও শাখা যে প্রতিশ্রুতি দেখায় কেবল তা সংশোধন করে না , এটি সূচী থেকে ফাইলগুলি আনস্টেজ করার জন্যও ব্যবহৃত হয় এবং ওয়ার্কিং কপিটি git reset --mixed(ডিফল্ট) দিয়ে সংশোধন করতে পারে ।

গিট রিসেট - সাফ্ট: পরিবর্তনগুলি আপমিট করুন, পরিবর্তনগুলি বাম পর্যায়ক্রমে (সূচক)। গিট রিসেট - মিক্সড (ডিফল্ট): আনকমেট + আনস্টেজ পরিবর্তন, পরিবর্তনশীল গাছের মধ্যে ছেড়ে যায়। গিট রিসেট --হार्ड: আনমাস্ট + আনস্টেজ + পরিবর্তনগুলি মুছুন, কিছুই অবশিষ্ট নেই।
NattyC

6

পুনরায় সেট করুন - প্রতিশ্রুতিবদ্ধ স্তরে, পুনরায় সেট করা একটি শাখার ডগাটিকে একটি ভিন্ন প্রতিশ্রুতিতে স্থানান্তরিত করার একটি উপায়। এটি বর্তমান শাখা থেকে কমিটগুলি অপসারণ করতে ব্যবহার করা যেতে পারে।

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

আপনি এই লিঙ্কটি একবার দেখতে পারেন- রিসেট, চেকআউট এবং রিভার্ট


5

আপনি যদি গাছটি ভেঙে ফেলেছেন তবে কোডটি প্রতিশ্রুতিবদ্ধ না করে আপনি ব্যবহার করতে পারেন git resetএবং আপনি যদি কেবল একটি ফাইল পুনরুদ্ধার করতে চান তবে আপনি ব্যবহার করতে পারেন git checkout

আপনি যদি গাছটি ভেঙে দিয়ে কোডটি প্রতিশ্রুতিবদ্ধ করেন তবে আপনি ব্যবহার করতে পারেন git revert HEAD

http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html

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