git resetসমস্ত চলন্ত সম্পর্কে HEAD, এবং সাধারণত শাখা রেফ ।
প্রশ্ন: কাজের গাছ এবং সূচক সম্পর্কে কী?
যখন নিয়োগ করা হয় --soft, সরানো হয় HEAD, প্রায়শই শাখা রেফ আপডেট করে এবং কেবলমাত্রHEAD ।
এটি থেকে পৃথক commit --amend:
- এটি একটি নতুন প্রতিশ্রুতি তৈরি করে না।
- এটা আসলে (যেমন কোন কমিট মাথা স্থানান্তর করতে পারেন
commit --amendশুধুমাত্র সম্পর্কে না , মাথা চলন্ত যখন বর্তমান পুনরায় কমিট যার ফলে)
সংযুক্তির এই উদাহরণটি সবেমাত্র পাওয়া গেছে:
- একটি ক্লাসিক মার্জ
- একটি সাবট্রি মার্জ
সবগুলি একটিতে (অক্টোপাস, যেহেতু দুটিরও অধিক শাখা একত্রীকরণ করা হয়েছে) সংযুক্ত হওয়ার প্রতিশ্রুতিবদ্ধ।
টমাস "ওয়্যারহ্যামস্টার" কার্নেক্কি তার "সাবট্রি অক্টোপাস মার্জ" নিবন্ধে ব্যাখ্যা করেছেন :
- আপনি যদি একটি প্রকল্পকে অন্য প্রকল্পের উপ-ডিরেক্টরিতে রূপান্তর করতে চান এবং পরবর্তীকালে সাবপ্রজেক্টটি আপ টু ডেট রাখতে চান তবে সাবট্রি মার্জ কৌশলটি ব্যবহার করা যেতে পারে। এটি গিট সাবমডিউলগুলির বিকল্প is
- অক্টোপাস মার্জ কৌশলটি তিন বা ততোধিক শাখাগুলি মার্জ করার জন্য ব্যবহার করা যেতে পারে। সাধারণ কৌশলটি কেবল দুটি শাখা মার্জ করতে পারে এবং আপনি যদি এর চেয়ে আরও বেশি সংশ্লেষ করার চেষ্টা করেন, গিটটি স্বয়ংক্রিয়ভাবে অক্টোপাস কৌশলটিতে ফিরে আসে back
সমস্যাটি হ'ল আপনি কেবল একটি কৌশল বেছে নিতে পারেন। তবে আমি একটি পরিষ্কার ইতিহাস পেতে যাতে দু'টি একত্রিত করতে চেয়েছিলাম যাতে পুরো সংগ্রহস্থলটি পরমাণুগতভাবে একটি নতুন সংস্করণে আপডেট হয়।
আমার একটি সুপারপ্রজেক্ট রয়েছে, এটি কল করুন projectAএবং একটি সাবপ্রজেক্ট projectB, যা আমি একটি উপ-ডিরেক্টরিতে রূপান্তরিত করেছি projectA।
(এটি সাবট্রি মার্জ অংশ)
আমি কয়েকটি স্থানীয় কমিট পরিচালনাও করছি।
ProjectAনিয়মিত আপডেট হয়, projectBপ্রতি কয়েক দিন বা সপ্তাহে একটি নতুন সংস্করণ থাকে এবং এটি সাধারণত কোনও নির্দিষ্ট সংস্করণের উপর নির্ভর করে projectA।
আমি যখন উভয় প্রকল্পের হালনাগাদ করার সিদ্ধান্ত নেন, আমি কেবল থেকে টান না projectAএবং projectB যে হিসাবে কি পুরো প্রকল্পের একটি পারমাণবিক আপডেট হওয়া উচিত দুটি করে তৈরি করবে ।
পরিবর্তে, আমি একটি একক একত্রীকরণ কমিট যা সম্মিলন তৈরি projectA, projectBএবং আমার স্থানীয় করে ।
এখানে জটিল অংশটি হ'ল এটি একটি অক্টোপাস মার্জ (তিনটি মাথা), তবে projectBসাবট্রি কৌশলের সাথে একত্রীকরণ করা দরকার । সুতরাং আমি এই কি:
# Merge projectA with the default strategy:
git merge projectA/master
# Merge projectB with the subtree strategy:
git merge -s subtree projectB/master
এখানে লেখক একটি ব্যবহার করেছিলেন reset --hard, এবং তারপরে read-treeপ্রথম দুটি সংশ্লেষ কার্যকারী গাছ এবং সূচকে কী করেছিল তা পুনরুদ্ধার করার জন্য, তবে এটিই reset --softসহায়তা করতে পারে:
আমি এই দুটি সংহতগুলি কীভাবে পুনরায় করব , যা কাজ করেছে, অর্থাৎ আমার কার্যকারী গাছ এবং সূচকগুলি ঠিক আছে, কিন্তু এই দুটি কমিট রেকর্ড না করে?
# Move the HEAD, and just the HEAD, two commits back!
git reset --soft HEAD@{2}
এখন, আমরা টমসের সমাধানটি আবার শুরু করতে পারি:
# Pretend that we just did an octopus merge with three heads:
echo $(git rev-parse projectA/master) > .git/MERGE_HEAD
echo $(git rev-parse projectB/master) >> .git/MERGE_HEAD
# And finally do the commit:
git commit
সুতরাং, প্রতিটি সময়:
- আপনি যা শেষ করেছেন তার সাথে আপনি সন্তুষ্ট (কার্যকর গাছ এবং সূচকের মেয়াদে)
- আপনি যে সমস্ত প্রতিশ্রুতি সেখানে পৌঁছেছেন তাতে আপনি সন্তুষ্ট নন :
git reset --soft উত্তর।
git reset --soft: stackoverflow.com/questions/6869705/...