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




git-checkout git-reset (4)

তাদের সর্বাপেক্ষা সহজ আকারে, রিসেটটি কাজের গাছটি স্পর্শ না করে সূচীটিকে reset সেট করে, যখন checkout স্পর্শ না করে কাজকারী গাছকে পরিবর্তন করে।

শিরোনামের সাথে মানানসই সূচী HEAD , HEAD গাছ একা বামে:

git reset

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

git checkout

আপনি পরামিতি যোগ শুরু একবার এটি কিছু overlap আছে সত্য।

checkout সাধারণত একটি শাখা, ট্যাগ বা কমিট সঙ্গে ব্যবহৃত হয়। এই ক্ষেত্রে এটি HEAD এবং HEAD প্রদত্ত HEAD রিসেট করবে এবং সেইসাথে সূচকের HEAD সম্পাদন করবে।

এছাড়াও, যদি আপনি reset করার জন্য সরবরাহ করেন তবে আপনি --hard ওভাররাইট করতে এবং সূচী পুনরায় reset করার জন্য reset করতে চাইতে পারেন।

আপনি যদি বর্তমান শাখাটি চেক আউট করে থাকেন তবে আপনি বিকল্প শাখা বা কমিট সরবরাহ করার সময় reset এবং checkout মধ্যে একটি গুরুত্বপূর্ণ ভিন্নতা রয়েছে। reset নির্বাচিত শাখায় নির্দেশ করতে বর্তমান শাখাটি পরিবর্তন করবে, চেকআউট শুধুমাত্র বর্তমান শাখাটি ছেড়ে দেবে তবে সরবরাহকৃত শাখাটি চেকআউট করবে বা পরিবর্তে এটি করবে।

reset এবং commit অন্যান্য ফর্ম পাথ সরবরাহ জড়িত।

যদি আপনি reset করার জন্য পাথ সরবরাহ করেন তবে আপনি সরবরাহ করতে পারবেন না - --hard এবং reset সরবরাহকৃত --hard সংস্করণটিতে সরবরাহিত পাঠের সূচী সংস্করণটি পরিবর্তন করবে (অথবা আপনি কোনও HEAD নির্দিষ্ট না করলে HEAD )।

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

আমি সবসময় git reset এবং git checkout চিন্তা করেছি, git reset উভয় প্রকল্পটিকে একটি নির্দিষ্ট কমিটিতে ফিরিয়ে আনবে। যাইহোক, আমি মনে করি তারা ঠিক একই হতে পারে না, যে হিসাবে অনাদায়ী হবে। দুই মধ্যে প্রকৃত পার্থক্য কি? আমি একটু বিভ্রান্ত, SVN শুধুমাত্র প্রতিশ্রুতি ফিরে svn co আছে।

যোগ করা হয়েছে

নিম্নোক্ত চিত্রটি পার্থক্যটি ব্যাখ্যা করে, যদিও সম্ভবত সম্ভবত সর্বাধিক বর্ধিত বা ভুল পদ্ধতিতে। আপনি কি মনে করেন? এটা ভুল বা overly সরলীকৃত হয়?

2 যোগ করা হয়েছে

VonC এবং চার্লস সত্যিই ভাল git reset এবং git checkout মধ্যে পার্থক্য ব্যাখ্যা। আমার বর্তমান বোঝার যে git reset একটি নির্দিষ্ট git checkout ফিরে আসা সকল পরিবর্তনগুলিকে ফিরিয়ে দেয়, তবে git checkout কমপক্ষে একটি শাখার জন্য প্রস্তুত করে। আমি এই বোঝার আসার জন্য বেশিরভাগ দরকারী দুটি ডায়াগগ্রাম খুঁজে পেয়েছি:

3 যোগ করা হয়েছে

http://think-like-a-git.net/sections/rebase-from-the-ground-up/using-git-cherry-pick-to-simulate-git-rebase.html থেকে, চেকআউট এবং রিসেট অনুকরণ করতে পারেন রিবেস।

git checkout bar 
git reset --hard newbar 
git branch -d newbar 


দুটি কমান্ড (রিসেট এবং চেকআউট) সম্পূর্ণ ভিন্ন।

checkout X reset --hard X না - reset --hard X

যদি এক্স একটি শাখা নাম থাকে, তবে checkout X reset --hard X সময় বর্তমান শাখাটি পরিবর্তন করবে - reset --hard X হবে না।


সংক্ষেপে মূল পার্থক্য হল যে রিসেটটি বর্তমান শাখা রেফারেন্সটি চালায় , checkout না করে (এটি HEAD সরানো হয়)।

প্রো জিট বইটি রিসেট ডেমিস্টাইফডের অধীনে ব্যাখ্যা করে,

প্রথম জিনিস reset করতে হবে HEAD পয়েন্ট কি সরানো হয় । এটি HEAD নিজেই পরিবর্তনের মতো নয় (যা checkout করে যা হয়); reset HEAD নির্দেশ করছে যে শাখা প্যাচসমূহ । এর অর্থ হ'ল master শাখা (যেমন আপনি বর্তমানে master শাখাতে আছেন) git reset 9e5e6a4 , চলমান git reset 9e5e6a4 পয়েন্টে 9 ই 9e5e6a4 করে শুরু করবে। [সামনে জোর দাও]

একই নিবন্ধ থেকে খুব সহায়ক পাঠ এবং চিত্রের উদ্ধৃতির জন্য VonC এর উত্তরটি দেখুন, যা আমি এখানে সদৃশ করব না।

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


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

https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting






git-reset