কোন শাখায় কোন কমিট অন্য শাখায় নেই তা কীভাবে দেখা যায়?


180

আমার দুটি শাখা আছে develএবং next। ডেভেল-এ আমার কম-বেশি প্রচুর পরিমাণে কমিট রয়েছে। কিছু কমিটিকে চেরি তোলা হয় next। এছাড়াও আমি সামঞ্জস্য করেছি পরের সাথে কিছু কমিট যা যুক্ত করা হয়েছে devel

এখন আমি কীটি অনুপস্থিত তা দেখতে চাই next, তাই পরিবর্তনগুলি এনে দেওয়ার আগে আমি তাদের বিশদ বিশদটি পরীক্ষা করতে পারি next। আমার প্রশ্ন এখন, আমি কীভাবে দেখব যে কোন কমিটস রয়েছে develতবে পরেরটিতে নয়?



আপনার শিরোনামটি কিছুটা বিভ্রান্তিকর, কারণ আপনি যা তুলনা করতে চান তা উভয় শাখার অগ্রভাগ। এবং আমি সমাধানের জন্য এখানে এসেছি দুটি শাখার নির্দিষ্ট (পৃথক)
কমিটের

উত্তর:


210

অল্প-ব্যবহৃত কমান্ড git cherryআপনাকে সেই কমিটগুলি দেখায় যা এখনও চেরি-বাছাই করা হয়নি। ডকুমেন্টেশন git cherryহয় এখানে , কিন্তু, সংক্ষেপে, আপনি শুধু কাজ করতে সক্ষম হওয়া উচিত:

git checkout devel
git cherry next

... এবং কিছুটা আউটপুট দেখুন:

+ 492508acab7b454eee8b805f8ba906056eede0ff
- 5ceb5a9077ddb9e78b1e8f24bfc70e674c627949
+ b4459544c000f4d51d1ec23f279d9cdb19c1d32b
+ b6ce3b78e938644a293b2dd2a15b2fecb1b54cd9

যে কমিটগুলি শুরু হয় +সেগুলি হ'ল আপনি এখনও চেরি-বাছাই করেন নি next। এই ক্ষেত্রে, আমি এখন পর্যন্ত কেবল চেরি-বাছাই করা একটি প্রতিশ্রুতি চাই। আপনি কমান্ডটিতে -vপ্যারামিটার যুক্ত করতে চাইতে পারেন git cherry, যাতে এটি প্রতিটি প্রতিশ্রুতির বিষয়বস্তু আউটপুট করে।


দুর্দান্ত, এটি আমার যা দরকার ছিল। পরীক্ষাগুলির একটি সংক্ষিপ্ত বিবরণ পেয়ে ভাল লাগবে, তবে আমি এটি স্ক্রিপ্ট করতে পারি।
স্যাশাফা এফার্ট

29
আপনার দরকার নেই git checkout devel, আপনি কেবল পারেন git cherry next devel
রবিন উইনস্লো

21
"যোগ করতে চান -v" ? একটি ছাড়া চেরি -vমত হল lsএকটি ছাড়া -la; -জে
স্লিপ ডি থম্পসন

1
এবং আপনি cherryসমমানের কমিটগুলি চিহ্নিত বা বাদ দেওয়ার কোনও উপায় জানেন না , তাই না? cherryনদীর গভীরতানির্ণা কমান্ডের মতো মনে হচ্ছে তবে অনেকগুলি বিকল্প প্রস্তাব দেয় না (প্রদর্শিত হবে না)। আমি বর্তমানে যার মাঝে আছি তার জন্য, git cherryআমাকে মিথ্যা ধনাত্মকতা git log --cherry-pickদেয় তবে @ সেহে পূর্বের বাছাই করা / পুনর্বাসিত প্রতিশ্রুতিগুলি সঠিকভাবে বাদ দেয়।
স্লিপ ডি থম্পসন

ডকুমেন্টেশনটি একটি দৃ
এএমএস

107

এছাড়াও, আপনি ব্যবহার করতে পারেন

git log --left-right --graph --cherry-pick --oneline devel...next

আসল একটি সুন্দর তালিকা পেতেশাখাগুলির মধ্যে ভাগ না করা বিভিন্ন কমিটের ।

অপারেটিভ শব্দটি হ'ল --cherry-pick

--cherry-pick

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

আপডেট একটি মন্তব্যে উল্লিখিত হিসাবে, গিটের সাম্প্রতিক সংস্করণগুলি যুক্ত হয়েছে --cherry-mark:

--cherry-mark

যেমন - কেচারি-পিক (নীচে দেখুন) তবে সমতুল্য চিহ্নগুলি = বাদ দেওয়ার পরিবর্তে এবং + সহ অসম্পূর্ণ চিহ্নিত করুন mark


1
এটি আমার পক্ষে কার্যকর হয়নি। আমার গিট সংস্করণটি - এক-লাইনটি জানে না, তাই আমি এটি সরিয়ে দিয়েছি। তারপরে আমাকে ডেভেল এবং পরবর্তী বিনিময় করতে হয়েছিল এবং এটি কাজ করেছিল। খুব সুন্দর!
স্যাশাচ এফার্ট

@ সাশাএফার্ট: আপনাকে দেভেল এবং পরবর্তী পরিবর্তন করতে হবে না (তিনটি বিন্দু লক্ষ্য করুন, দুটি নয়)। এটি বলেছিল, আপনি যদি গিটার (?) এর একটি প্রাচীন সংস্করণ ব্যবহার করেন তবে জিনিসগুলি আলাদা হতে পারে তবে সেক্ষেত্রে আপনার তিনটি বিন্দুতে পুনর্বিবেচনার ত্রুটি পাওয়া উচিত ছিল।
sehe

2
মজা করার জন্য, আমি পরিশ্রম করেছি যে '...' (প্রতিসম পার্থক্য) রেভ-পার্স সিনট্যাক্স 2006 এর জুলাইয়ে যুক্ত হয়েছিল এবং এটির জন্য ডকুমেন্টেশন জুন ২০০ in এ আপডেট হয়েছিল । উন্মুক্ত উত্সের আনন্দ!
sehe

1
'gls - প্রথম-পিতামাতার - কেরি-চিহ্ন - বাম-কেবল বিকাশ করুন ... পরবর্তী' যেখানে gls হ'ল সমস্ত সুন্দর বিন্যাস সহ আমার গিট লগ ওরফে। চেরি-চিহ্নটি চেরি বাছাই করা এবং নন-চেরি বাছাই করা উভয়ই বিকাশের প্রতিশ্রুতি দেখায়, তবে সেগুলি আলাদাভাবে চিহ্নিত করে।
অ্যাঙ্গুলারসেন

1
যোগ করুন - না-মার্জ হতে পারে আরও ভাল
MervynYang

51

আপনি গিট লগ সাবসেটগুলি চেষ্টা করে দেখতে পারেন:

git log --oneline devel ^next

4
এটি আমার মতে সেরা সমাধান (@ সেহের জবাব এছাড়াও পরবর্তীকালে কমিটগুলি দেখায় যেগুলি ডেভিল নয় - ওপি'র প্রসঙ্গে, আমার মধ্যে কিছু নেই, তবে আমার মধ্যে রয়েছে - ব্যবহার --left-onlyকরা আরও ভাল হত)। তবে --no-mergesযেকোন মার্জ কমিট (যেমন কোনও বৈশিষ্ট্য বা হটফিক্স শাখাটি ডেভেল এবং পরবর্তী উভয় ক্ষেত্রেই আলাদাভাবে মার্জ করা হয়েছে) যুক্ত করে এইটিকে কিছুটা উন্নত করা যেতে পারে । কড়া কথায় বলতে গেলে অবশ্যই মার্জগুলিতে সংঘাতের সমাধান অন্যান্য পার্থক্য তৈরি করতে পারে তবে সাধারণত এটি হয় না। --no-mergesবিকল্প থেকে কার্যকররূপে পাশাপাশি অন্যান্য উত্তর প্রয়োগ করা যেতে পারে।
অ্যালেক্স ডুপুই

27

কেমন

git log next..devel

ফলাফল বায়রানের উত্তরের সাথে সমান (কমিটের বিভিন্ন ক্রম) তবে আমাদের উভয় উত্তরই কমিটগুলি তৈরি করবে যা শাখাগুলির মধ্যে পৃথক, বরং কেবল একটি শাখায় কী রয়েছে তা প্রদর্শন করে অন্যটিতে নয়।


4
আপনি যদি বর্তমানে সেই শাখায় থাকেন তবে আপনি দ্বিতীয় শাখাটিও বাদ দিতে পারেন। অর্থাত্git log next..
jmaxyz

বিটিডব্লিউ 'গিট লগ নেক্সট..ডিভেল' 'গিট লগ ডিভেল..সেক্সট' থেকে আলাদা
ইউজেন কৌরভ

1

প্রকাশের শাখায় একীভূত হয়নি এমন কমিটগুলির তালিকা পেতে (পরবর্তী) আপনি ব্যবহার করতে পারেন:

git rev-list --reverse --pretty="TO_TEST %h (<%ae>) %s" --cherry-pick --right-only origin/release_branch...origin/development_branch | grep "^TO_TEST " > NotIntegratedYet.txt

আরও তথ্যের জন্য গিট-রেভ-তালিকা পরীক্ষা করুন ।


এই উত্তরের আদেশটি প্রকৃত শাখাগুলি অনুপস্থিত, যেমনnext...devel
অ্যালেক্স ডুপুয়

@ অ্যালেক্সডুপু ইয়াহ, এটি একটি সুন্দর অর্ধচিকিত্সার উত্তর। যেহেতু এটিও সহজ উত্তর নয় এবং কেন এই পদ্ধতিটি আরও ভাল হবে তা ব্যাখ্যা করে না, তাই আমি এটি -1 করছি ing
স্লিপ ডি থম্পসন

-1

@ মারক লংগায়ার তার উত্তরে এটি পেরেক দিয়েছিল তবে আমি কিছু অতিরিক্ত অন্তর্দৃষ্টি যুক্ত করতে চাই।

সম্পর্কিত, এবং কীভাবে একটি বড় পুল অনুরোধ (পিআর) ভেঙে দেওয়া যায় সেই প্রশ্নের উত্তর দেওয়া, বিশেষত যখন আপনার প্রতিশ্রুতিগুলি স্কোয়াশ করা আপনার বৈশিষ্ট্য_ব্রঞ্চে এক বা একাধিক মাস্টারকে একীভূত করার কারণে অবাস্তব হয়

আমার অবস্থা:
আমি একটি বড় প্রণীত 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 খুলতে পারি এবং সেগুলি আমার দলের পক্ষে পর্যালোচনা করা আরও সহজ হবে।

তথ্যসূত্র:

  1. গিট সংগ্রহস্থল থেকে প্যাচ বা ডিফ ফাইল তৈরি করুন এবং এটি অন্য একটি পৃথক গিট সংগ্রহস্থলে প্রয়োগ করুন

আমার আজ এই উত্তরটি উল্লেখ করার দরকার ছিল তবে তা দ্রুত খুঁজে পেলাম না। ভাগ্যক্রমে, এটিকে আমার আরও সহজ করে তুলতে সাহায্য করার জন্য এটি একটি ডাউনওয়েট ছিল, সুতরাং স্ক্রিনের উপরের ডানদিকে পুরষ্কার কাপ আইকনের একটি সাধারণ ক্লিকটি দেখিয়েছে যে আমি সম্প্রতি যেখানে 2 পয়েন্ট হারিয়েছি, এবং সেখানে ক্লিক করে আমাকে এখানে ফিরিয়ে আনি যেখানে আমি পারি এখন আমার নিজের উত্তর এখানে রেফারেন্স! আশা করি আমি আর ডাউনভোটস পাব না, তবে ডাউনওয়োটারের কাছে, সেই পরিষেবাটির জন্য ধন্যবাদ যা দুর্ঘটনাক্রমে আমাকে সহায়তা করেছিল!
গ্যাব্রিয়েল স্ট্যাপলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.