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




reset (5)

আপনার মনে আছে যে git মধ্যে মনে রাখবেন:

  • HEAD পয়েন্টার , যা আপনাকে বলে যে আপনি কি কাজ করছেন
  • কাজ গাছ , যা আপনার সিস্টেমে ফাইলের অবস্থা প্রতিনিধিত্ব করে
  • স্টেজিং এলাকা (এছাড়াও ইন্ডেক্স বলা হয়), যা "পর্যায়গুলি" পরিবর্তন করে যাতে তারা পরে একসাথে সংঘবদ্ধ হতে পারে

সম্পর্কে বিস্তারিত ব্যাখ্যা অন্তর্ভুক্ত করুন:

--hard , - --soft এবং --merge ;

বিপজ্জনক-নেস ক্রমবর্ধমান ক্রম:

  • --soft HEAD কিন্তু স্টেজিং এলাকা বা কাজ গাছ স্পর্শ করে না।
  • --mixed HEAD এবং স্টেজিং এলাকা আপডেট, কিন্তু কাজ গাছ না।
  • --merge HEAD চালায়, স্টেজিং --merge রিসেট করে, এবং আপনার কাজের গাছের সমস্ত পরিবর্তন নতুন কাজের গাছে সরাতে চেষ্টা করে।
  • --hard HEAD সরানো এবং সবকিছু দূরে নিক্ষেপ, নতুন HEAD থেকে আপনার স্টেজিং এলাকা এবং কাজ গাছ সমন্বয়।

কংক্রিট ব্যবহার ক্ষেত্রে এবং workflows;

  • যখন আপনি অন্য একটি --soft সরাতে চান এবং "আপনার স্থান হারানো" ছাড়াই জিনিসগুলি প্যাচ করতে চান তখন --soft ব্যবহার করুন। এটা আপনি প্রয়োজন যে খুব বিরল।

-

# git reset --soft example
touch foo                            // Add a file, make some changes.
git add foo                          // 
git commit -m "bad commit message"   // Commit... D'oh, that was a mistake!
git reset --soft HEAD^               // Go back one commit and fix things.
git commit -m "good commit"          // There, now it's right.

-

  • যখন আপনি দেখতে চান যে --mixed (যা ডিফল্ট) কোন জিনিস অন্য কোনটি দেখতে কেমন দেখতে চায় তবে আপনি ইতিমধ্যে যে কোনও পরিবর্তন হারাতে চান না।

  • যখন আপনি একটি নতুন স্পটে যেতে চান তখন --merge ব্যবহার করুন কিন্তু আপনি ইতিমধ্যে যে গাছের মধ্যে পরিবর্তন আছে অন্তর্ভুক্ত।

  • ব্যবহার করুন - সবকিছু মুছে ফেলার জন্য এবং নতুন কমিটিতে একটি তাজা স্লেট শুরু করুন।

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

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

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

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

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

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

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

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

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

জিট রিসেট

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

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

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

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

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

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

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

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

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


টি এল; ডিআর

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 থেকে


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

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

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

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

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


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

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

রং দিয়ে টার্মিনাল ব্যবহার যারা যারা জন্য (জিটি কনফিগারেশন - গ্লোবাল 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 এবং আপনি আর বি এবং সি এর পরিবর্তনগুলি আর দেখতে পাবেন না (যেমন তারা কখনও বিদ্যমান ছিল না)






reset