@ মারক লংগায়ার তার উত্তরে এটি পেরেক দিয়েছিল তবে আমি কিছু অতিরিক্ত অন্তর্দৃষ্টি যুক্ত করতে চাই।
সম্পর্কিত, এবং কীভাবে একটি বড় পুল অনুরোধ (পিআর) ভেঙে দেওয়া যায় সেই প্রশ্নের উত্তর দেওয়া, বিশেষত যখন আপনার প্রতিশ্রুতিগুলি স্কোয়াশ করা আপনার বৈশিষ্ট্য_ব্রঞ্চে এক বা একাধিক মাস্টারকে একীভূত করার কারণে অবাস্তব হয়
আমার অবস্থা:
আমি একটি বড় প্রণীত feature_branch30 করে এবং GitHub থেকে খিঁচ অনুরোধ (জনসংযোগ) সেটিকে একত্রীকরণ খোলা master। শাখাটি masterআমার নীচে একটি টন পরিবর্তন করেছে এবং আমার feature_branchকাছে নেই এমন 200 টি কমিট পেয়েছে । সমাধান দ্বন্দ্ব আমি git checkout feature_branchএবং git merge masterএকত্রীকরণ masterআমার মধ্যে 'র পরিবর্তন feature_branch। আমি সর্বশেষতম মাস্টারের mergeপরিবর্তে বেছে নিয়েছি rebaseসুতরাং আমি সম্ভাব্য 30 বারের পরিবর্তে একবারে একবারে আমার দ্বন্দ্বগুলি সমাধান করতে হবে (একবারে আমার প্রতিটি অঙ্গীকারের জন্য)। আমি আমার 30 টি কমিটকে প্রথমে 1 এ স্কোয়াশ করতে চাই না এবং তারপরে সর্বশেষতমটিতে পুনরায় চালু করবmaster কারণ এটি পিআর-তে গিটহাব পর্যালোচনা মন্তব্য ইতিহাস মুছতে পারে। সুতরাং, আমি মাস্টারটিকে আমার বৈশিষ্ট্য শাখায় মার্জ করে দিয়েছি এবং একক বার দ্বন্দ্বগুলি সমাধান করেছি। সব ভালো ছিল. আমার পিআর, আমার সহকর্মীদের কাছে পর্যালোচনা করার পক্ষে খুব বড় ছিল। আমি এটি বিভক্ত করা প্রয়োজন। আমি আমার 30 টি কমিট স্কোয়াশ করতে গিয়েছিলাম এবং ওহ না! তারা কোথায়? তারা masterএখন 200 এর সাথে করা সমস্ত কমিটের সাথে মিশে আছে কারণ আমি আমার সাথে একীভূত masterহয়েছি feature_branch! আমি কি করব?
git cherryআপনি git cherry-pickব্যক্তিগত প্রতিশ্রুতি চেষ্টা করতে চান ক্ষেত্রে ব্যবহার :
git cherry উদ্ধার (ধরণের)!
আমি করতে পারি feature_branchনা এমন সমস্ত কমিটগুলি দেখতে যা master:
git checkout feature_branch
git cherry master
বা, আমি যে কোনও শাখার মাধ্যমে কমিটগুলি পরীক্ষা করে দেখতে পারি এবং নিশ্চিত করেছিলাম যে আমি feature_branchপ্রথমে git cherry [upstream_branch] [feature_branch]এই জাতীয় কাজ করে প্রথম করছি । আবার, এই চেক যা দেখতে করে আছেন feature_branchকিন্তু এতে নেই upstream_branch( masterএই ক্ষেত্রে):
git cherry master feature_branch
যোগ করা -vপ্রতিশ্রুতি বার্তা বিষয় লাইনগুলি দেখায়:
git cherry -v master
"শব্দের গণনা" "-লাইনস" ( wc -l) তে পাইপিং করা কতগুলি কমিট গণনা করে:
git cherry master | wc -l
আপনি git cherryসত্যই কাজ করছেন তা জানার জন্য আরও ভাল বোধ করতে আপনার গিথহাব আরআর তে দেখানো প্রতিশ্রুতি সংখ্যার সাথে এই গণনাটি তুলনা করতে পারেন । আপনি গিট হ্যাশগুলি একে অপরের সাথে তুলনা করতে পারেন এবং দেখুন যে তারা git cherryগিটহাবের মধ্যে মিলছে । লক্ষ্য করুন git cherryকোন একত্রীকরণ করে যেখানে আপনি মার্জ করা হয়নি গণনা করা হবে masterমধ্যে feature_branchকিন্তু GitHub হবে। সুতরাং আপনি যদি গণনায় একটি সামান্য তাত্পর্য দেখতে পান, "মার্জ" শব্দের জন্য গিটহাব পিআর কমিট পৃষ্ঠাটি অনুসন্ধান করুন এবং আপনি সম্ভবত দেখতে পাবেন যে এটিই সেই অপরাধী যা প্রদর্শিত হচ্ছে না git cherry। উদাহরণস্বরূপ: "ফিচার_ ব্রাঞ্চে 'মার্জ শাখা' মাস্টার ' শিরোনামের একটি প্রতিশ্রুতি গিটহাব PR তে প্রদর্শিত হবে তবে আপনি যখন চালাবেন তা নয় git cherry master feature_branch। এটি সূক্ষ্ম এবং প্রত্যাশিত।
সুতরাং, এখন আমার কাছে এই আবিষ্কারের একটি উপায় আছে যে আমি এই ভিন্নতা বিভক্ত করার জন্য একটি নতুন বৈশিষ্ট্য শাখায় চেরি-বাছাই করতে চাইতে পারি: আমি git cherry master feature_branchস্থানীয়ভাবে ব্যবহার করতে পারি , বা গিটহাব পিআর-এর কমিটগুলি দেখতে পারি।
স্কোয়াশিং কীভাবে সহায়তা করতে পারে - কেবল যদি আমরা স্কোয়াশ করতে পারি:
তবে, আমার বড় পার্থক্যের বিভক্ত করার বিকল্পটি হ'ল আমার 30 টি কমিটকে স্কোয়াশ করা, একটি নতুন ফিচার শাখায় প্যাচ করা, প্যাচ কমিটকে রিসেট করুন, তারপরে git guiফাইলের মাধ্যমে টুকরো ফাইল যুক্ত করতে, চুনক দ্বারা গুঁজে ফেলুন, বা লাইন লাইন। আমি যখন একটি উপ-বৈশিষ্ট্য পেয়েছি, তখন আমি আমার যা যুক্ত করেছি তার প্রতিশ্রুতি দিতে পারি তারপরে একটি নতুন শাখা চেক আউট, আরও কিছু যুক্ত করা, প্রতিশ্রুতিবদ্ধকরণ, একটি নতুন শাখা ইত্যাদি পরীক্ষা করা ইত্যাদি যতক্ষণ না আমার বেশ কয়েকটি সাব-বৈশিষ্ট্য বিভক্ত হয় । সমস্যাটি হ'ল আমার 30 টি কমিটগুলি আমার 200 জন লোকের সাথে অন্যান্য 200 কমিটের সাথে আমার git merge masterমধ্যে প্রবেশের সাথে মিলিত হয়েছে feature_branch, সুতরাং রিবাইজিংটি অবাস্তব, কারণ আমাকে পুনরায় অর্ডার করার জন্য আমার ৩০ টি কমিটকে স্ক্র্যাশ করতে 230 কমিটের মধ্য দিয়ে যেতে হবে।
স্কোয়াশিংয়ের জন্য আরও সহজে প্রতিস্থাপন হিসাবে প্যাচ ফাইলটি কীভাবে ব্যবহার করবেন:
একটি পরিশ্রমের কাজটি হ'ল আমার 30 টি কমিটের "স্কোয়াশ-সমতুল্য" সমন্বিত একটি প্যাচ ফাইলটি পাওয়া , এটি একটি নতুন কাঁটাচামচ master(একটি নতুন উপ-বৈশিষ্ট্য-শাখা) এর উপর প্যাচ করা এবং সেখান থেকে নিম্নরূপে কাজ করা:
git checkout feature_branch
# ensure I have the latest changes from master merged into feature_branch
git merge master
# Obtain a patch file, which is the equivalent of a squash of my 30 commits into 1 commit:
git diff master..feature_branch > ~/mypatch.patch
git checkout master
# Create a new, sub-feature branch
git checkout -b feature_branch2
# Patch the 30 commit patch file onto it:
git apply ~/mypatch.patch
এখন আমার 30-কমিটের প্যাচ সমস্ত স্থানীয়ভাবে প্রয়োগ হয়েছে, তবে অযৌক্তিক এবং নিরীক্ষিত।
এখন git guiফাইল, খণ্ডস এবং / অথবা লাইন যুক্ত করতে এবং আপনার বড় আরআর বা "ডিফার" ভাঙ্গার জন্য ব্যবহার করুন:
মনে রাখবেন যে আপনার যদি না থাকে তবে আপনি git guiএটি সহজেই উবুন্টুতে এটি ইনস্টল করতে পারেন sudo apt install git-gui।
আমি এখন চালাতে git guiএবং ফাইলগুলি, খণ্ডগুলি এবং / অথবা লাইনগুলি (গিট জিইউআই প্রোগ্রামে ডান ক্লিক করে) যোগ করতে শুরু করতে পারি , এবং উপরে উল্লিখিত 30 টি কমিট বৈশিষ্ট্য শাখাটি কেবল উপরে বর্ণিত হিসাবে বারবার যুক্ত, প্রতিশ্রুতিবদ্ধকরণ, এবং তারপরে কাঁটাচামচ করা যায় একটি নতুন বৈশিষ্ট্য শাখা এবং এই পরিবর্তনটিকে পুনরাবৃত্তি করা পর্যন্ত সমস্ত পরিবর্তন একটি উপ-বৈশিষ্ট্য-শাখায় যোগ না করা এবং আমার 30 টি প্রতিশ্রুতি বৈশিষ্ট্যটি সফলভাবে 3 বা 4 উপ-বৈশিষ্ট্যে বিভক্ত করা হয়েছে। আমি এখন এই সাব-বৈশিষ্ট্যগুলির জন্য পৃথক PR খুলতে পারি এবং সেগুলি আমার দলের পক্ষে পর্যালোচনা করা আরও সহজ হবে।
তথ্যসূত্র:
- গিট সংগ্রহস্থল থেকে প্যাচ বা ডিফ ফাইল তৈরি করুন এবং এটি অন্য একটি পৃথক গিট সংগ্রহস্থলে প্রয়োগ করুন