গিট ব্যবহার করে, একটি শাখায় থাকা সমস্ত কমিটগুলি দেখান, তবে অন্যটি নয়


463

আমার একটি পুরানো শাখা রয়েছে, যা আমি মুছতে চাই। তবে এটি করার আগে, আমি তা দেখতে চাই যে এই শাখায় করা সমস্ত কমিটগুলি এক পর্যায়ে অন্য কোনও শাখায় একত্রিত হয়েছিল। সুতরাং, আমি আমার বর্তমান শাখায় করা সমস্ত কমিটগুলি দেখতে চাই যা অন্য কোনও শাখায় প্রয়োগ করা হয়নি [বা, যদি কিছু স্ক্রিপ্টিং ছাড়া এটি সম্ভব না হয়, তবে যে শাখায় প্রয়োগ করা হয়নি, সেগুলি কীভাবে দেখা যায়? অন্য প্রদত্ত শাখায়?]।


দুটি শাখা মধ্যে অনুপস্থিত করে তালিকা প্রস্তুত করার জন্য আপনাকে compare-branches.py ব্যবহার করতে পারেন bitbucket.org/aakef/compare-git-branches
Bernd Schubert

উত্তর:


319

আপনি সম্ভবত শুধু চান

git branch --contains branch-to-delete

এটি "শাখা-থেকে-মুছুন" থেকে কমিটগুলি যুক্ত সমস্ত শাখার তালিকা তৈরি করবে। যদি এটি কেবল "শাখা-থেকে-মুছুন" এর চেয়ে বেশি রিপোর্ট করে তবে শাখাটি মার্জ করা হয়েছে been

আপনার বিকল্পগুলি সত্যই কেবল সিনট্যাক্সের রেভ-লিস্টের জিনিস। যেমন git log one-branch..another-branchসমস্ত কিছু থাকা one-branchদরকার যা দেখায় another-branch

git show-branchকী কী তা দেখার উপায় হিসাবে আপনি আগ্রহীও হতে পারেন।


2
+1 টি। আরও দেখুন stackoverflow.com/questions/850607/...
VonC

1
লাইন 'এটা কিছু, শাখা মিশে গিয়ে তৈরি করেছে রিপোর্ট যদি' ভুল ব্যাখ্যা করা যেতে পারে যদি git branch --contains some-branchশুধুমাত্র আয় some-branch, তারপর এটি রিটার্ন কিছু না, কিন্তু এটা আছে না হয়েছে মার্জ হয়েছে।
বিভ্রান্তি

5
দ্রষ্টব্য যে git log foo..barবারের সর্বশেষ এবং foo এর সর্বশেষতমের মধ্যে করা কমিটগুলি দেখায়, কিন্তু অন্যান্য কমিটগুলি সময়ের সাথে অনুপস্থিত। বারে সমস্ত কিছু দেখার জন্য, কিন্তু ফু-তে নয়, আপনার @ জিমিওরর সলিউশনটি ব্যবহার করা উচিত।
পল এ জংউথर्थ

555

কোন শাখায় কমিট রয়েছে তার তালিকা দেখতে অন্যটিতে নয়, গিট লগ ব্যবহার করুন:

git log --no-merges oldbranch ^newbranch

... যে, কমিট যে oldbranch সব করে জন্য লগ দেন না newbranch উপর। আপনি একাধিক শাখা তালিকাভুক্ত করতে এবং অন্তর্ভুক্ত করতে পারেন, যেমন

git log  --no-merges oldbranch1 oldbranch2 ^newbranch1 ^newbranch2

দ্রষ্টব্য: উইন্ডোজে ^একটি এস্কেপ কী, তাই এটির সাথে অন্যটির সাথে পালানো দরকার ^:

git log --no-merges oldbranch ^^newbranch

2
আমি এটি দুটি শাখার গিটারের তুলনায় কমিটের সন্ধান করতে দেখেছি।
ব্যবহারকারী

25
আমি ঠিক এটিই খুঁজছিলাম। কিন্তু, ^এখানে উপসর্গ হিসাবে ব্যবহার আমাকে বিভ্রান্ত করেছে। এই প্রসঙ্গে এর অর্থ সেই শাখাটি বাদ দেওয়া lude ^প্রত্যয় হিসাবে ব্যবহার করা সেই শাখার পিতামাতার প্রতিশ্রুতি সম্পর্কিত একটি আপেক্ষিক রেফারেন্স হবে।
জো ফ্লিন 16

4
খুব দরকারী ধন্যবাদ। আমি কৌতূহলী, কেন - না-মার্জ পতাকাটি প্রয়োজনীয়? নিশ্চয়ই কেউ এই প্রতিশ্রুতিগুলিও দেখতে চায়?
ম্যাক্সলিউড

2
এই সঙ্গে gitk ব্যবহার করতে চান? সহজভাবে ব্যবহার করুন gitk oldbranch ^newbranch --no-merges(গিট 1.8.1.1 এর সাথে পরীক্ষিত)। পার্শ্ব নোট, আমার ^জন্য শাখার অন্তর্ভুক্ত হেড কমিট newbranch
ম্যাট

2
@ নাজারি গুডজোভাটি - হ্যাঁ, আছে: "-চারারি-বাছাই"। ডকুমেন্টেশন পৃষ্ঠায়
রোমারা

91

ওল্ডব্রাঞ্চে কমিটগুলি প্রদর্শন করতে তবে নিউ ব্র্যাঞ্চে নয়:

git log newbranch..oldbranch

এই কমিটগুলির মাধ্যমে পার্থক্যটি দেখানোর জন্য (নোট এখানে তিনটি বিন্দু রয়েছে):

git diff newbranch...oldbranch

এখানে একটি চিত্রের চিত্র সহ https://git-scm.com/book/en/v2/Git-Tools- পরিবর্তন- নির্বাচন # কমিট- রেঞ্জ


উপরে পল এ জংউইথের মন্তব্য দেখুন । মনে হচ্ছে এটি কিছু পুরানো কমিটগুলি মিস করবে?
দুর্ভাগ্য পরিবর্তনশীল

2
আমি নিশ্চিত না যে পুরানো কমিটগুলি কী বোঝায়। দ্বিগুণ বিন্দুগুলি গিটকে মূলত এমন একাধিক কমিট সমাধান করতে বলে যা একটি কমিট থেকে পৌঁছতে পারে তবে অন্যের থেকে পৌঁছানো যায় না। এখানে ডিজিটাম চিত্রের সাথে ডকটি দেওয়া আছে git-scm.com/book/en/v2/…
Xuan

1
এবং যদি আমরা হয় newbranchবা হয় oldbranch, আমরা যথাক্রমে করতে পারি git log ..oldbranchবা করতে পারিgit log newbranch..
ইয়াকভল

জিমিওরর সলিউশনটি আমার পক্ষে কাজ করে নি, তবে এইটি রেফের ..নামের মধ্যে দুটি বিন্দুর জন্য ধন্যবাদ জানায় । --cherry-pickউভয় শাখায় উপস্থিত কমিটগুলি লুকানোর জন্য আমি বিকল্পটিও ব্যবহার করেছি তবে একটি ভিন্ন হ্যাশ রয়েছে কারণ তারা একটি শাখা থেকে অন্য শাখায় চেরি-বাছাই করেছিল।
flawyte

58

যারা এখনও একটি সহজ উত্তর খুঁজছেন তাদের জন্য গিট চেরিটি দেখুন । এটি হ্যাশ প্রতিশ্রুতিবদ্ধ করার পরিবর্তে প্রকৃত ভিন্নতার সাথে তুলনা করে। তার অর্থ এটি চেরি বাছাই বা পুনরায় বসানো হয়েছে এমন কমিটগুলি সমন্বিত করে।

আপনি যে শাখাটি মুছতে চান তা প্রথমে চেকআউট করুন:

git checkout [branch-to-delete]

তারপরে এটি আপনার প্রধান বিকাশের শাখার সাথে তুলনা করতে গিট চেরি ব্যবহার করুন:

git cherry -v master

উদাহরণ আউটপুট:

+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
- 85867e38712de930864c5edb7856342e1358b2a0 Yet another message

দ্রষ্টব্য: -vপতাকাটি SHA হ্যাশ সহ প্রতিশ্রুতি বার্তা অন্তর্ভুক্ত করবে।

সামনে '+' যুক্ত লাইনগুলি শাখা-থেকে-মুছতে রয়েছে, তবে মাস্টার শাখা নয়। যাদের সামনে '-' রয়েছে তাদের মাস্টারে সমমানের প্রতিশ্রুতি রয়েছে।

মাস্টার নয় এমন কমিটিকে কেবলমাত্র গ্রেটের সাথে চেরি পিক একত্রিত করুন:

git cherry -v master | grep "^\+"

উদাহরণ আউটপুট:

+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message

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

1
এখানে আপনার সঠিক দৃশ্যের বিষয়ে নিশ্চিত নন তবে আপনি যদি একাধিক কমিটকে একসাথে স্কোয়াশ করে ফেলেছেন এবং অন্য শাখার সাথে এটির তুলনা করছেন যেখানে কমিটগুলি পৃথক রয়েছে তবে এটি অবশ্যই কাজ করবে না। সেক্ষেত্রে আপনি diffবিভিন্ন ফাইলের তুলনা করার জন্য ইউনিক্স ইউটিলিটিটি কেবল ব্যবহার করতে চাইতে পারেন । অথবা, আপনি একটি অস্থায়ী শাখা তৈরি করতে পারেন এবং মূল শাখার সাথে আপনি যা করেছিলেন তার মতো সমস্ত কমিটগুলি স্কোয়াশ করতে পারে এবং তারপরে এটি ব্যবহার করতে পারে, যা আমার মনে হয় এটি কার্যকর হবে।
টিম এস

50

এখানে পোস্ট করা কয়েকটি উত্তর আপনি যা খুঁজছেন তা খুঁজে পেতে সহায়তা করবে, যদিও গিট শাখার নিম্নলিখিত সাব-কমান্ডটি আপনার কাজের জন্য আরও উপযুক্ত সমাধান।

- ডালগুলি সমস্ত শাখাগুলি সন্ধান করতে ব্যবহৃত হয় যা নিরাপদে মুছে ফেলা যায়, যেহেতু সেই শাখাগুলি সম্পূর্ণরূপে হেডের অন্তর্ভুক্ত।

যদিও masterএক শাখা এক নিরাপদে তাই মত দূর করতে পারবে? গনা কমান্ড সম্মূখীন হতে পারেন:

git branch --merged
  develop
  fpg_download_links
* master
  master_merge_static

# Delete local and remote tracking branches you don't want
git branch -d fpg_download_links
git push origin :fpg_download_links
git branch -d master_merge_static
git push origin :master_merge_static

# There is also a flag to specify remote branches in the output
git branch --remotes --merged

16

জিমিওর এর উত্তর উইন্ডোজে কাজ করে না। এটি পছন্দ মতো --notপরিবর্তে ব্যবহার করতে সহায়তা করে ^:

git log oldbranch --not newbranch --no-merges

4
এটি সঠিক, +1। নোট যে যদিও ^Windows এ সমর্থিত নয়, তবে চাহিদা পলান করা, যা, উইন্ডোজে, (অন্য) হল ^: git log oldbranch ^^newbranch --no-merges
ভনসি

3
নির্দিষ্ট করে বলতে গেলে এটি পাওয়ারশেল কনসোলে উইন্ডোজে কাজ করে তবে সিএমডি-তে অতিরিক্ত "^" প্রয়োজন।
রড

7

যদি এটির একটি (একক) শাখা আপনার যাচাই করা দরকার, উদাহরণস্বরূপ আপনি যদি চান যে শাখা 'বি' পুরোপুরি শাখা 'এ' তে মিশে গেছে, আপনি কেবল নিম্নলিখিতটি করতে পারেন:

$ git checkout A
$ git branch -d B

git branch -d <branchname> সুরক্ষা আছে যে "শাখাটি অবশ্যই পুরো শিরোনামে একত্রীকরণ করতে হবে।"

সাবধানতা : এটি শাখাগুলি বি কে এগুলিতে মার্জ করা হলে তা মুছে ফেলবে actually


3

মার্জ না হওয়া কমিটগুলি দেখতে আপনি এই সাধারণ স্ক্রিপ্টটি ব্যবহার করতে পারেন

#!/bin/bash
# Show commits that exists only on branch and not in current
# Usage:
#   git branch-notmerge <branchname>
#
# Setup git alias
#   git config alias.branch-notmerge [path/to/this/script]
grep -Fvf <(git log --pretty=format:'%H - %s') <(git log $1 --pretty=format:'%H - %s')

আপনি সরঞ্জাম গিট-ডাব্লুটিএফও ব্যবহার করতে পারেন যা শাখাগুলির স্থিতি প্রদর্শন করবে


0

শুধু ব্যবহার git cherryশাখায় সব করে নিতে newFeature42উদাহরণস্বরূপ:

গিট চেরি -v মাস্টার নতুন ফিচার 42


-5

আপনি যে গিট হোস্টিং পরিষেবাটি ব্যবহার করছেন তার মাধ্যমে একটি পুল অনুরোধ তৈরি শুরু করুন । যদি শাখাটি পুরো বেস শাখায় একত্রীকরণ করা হয়ে থাকে, আপনি নতুন PR তৈরি করতে অক্ষম হবেন।

আপনাকে আসলে টানা অনুরোধ করার দরকার নেই, আপনি যেখানে প্রথম শাখাটি বেছে নেবেন কেবল সেখানে প্রথম পদক্ষেপটি ব্যবহার করুন।

উদাহরণস্বরূপ, গিটহাবে:

তুলনা করার মতো কিছু নেই

সংযুক্ত হয়ে যাওয়া শাখাগুলির জন্য জনসংযোগ তৈরি করতে পারে না।

এটি কমান্ড লাইনে গিট ব্যবহার করে না, তবে আমি প্রায়শই অন্য আরকেন গিট কমান্ডটি মনে রাখার চেষ্টা করার পরিবর্তে সুস্পষ্ট মানসিক মডেল দিয়ে আপনার নিষ্পত্তিস্থ অন্যান্য সরঞ্জামগুলি ব্যবহার করা সহায়ক বলে মনে করি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.