কীভাবে আমি জানতে পারি যে কোনও শাখা ইতিমধ্যে মাস্টারের সাথে একীভূত হয়েছে?


1139

আমার একাধিক শাখা সহ গিট সংগ্রহস্থল রয়েছে।

কোন শাখাগুলি ইতিমধ্যে মাস্টার শাখায় একীভূত হয়েছে তা আমি কীভাবে জানতে পারি?

উত্তর:


1792

git branch --merged masterতালিকা শাখা মধ্যে মিশে গিয়ে তৈরি মাস্টার

git branch --mergedতালিকা শাখা মধ্যে মিশে গিয়ে তৈরি মস্তক (বর্তমান শাখার অর্থাত ডগা)

git branch --no-merged মার্জ করা হয়নি এমন শাখাগুলির তালিকা করে

ডিফল্টভাবে এটি কেবল স্থানীয় শাখায় প্রযোজ্য। দ্য-aপতাকা স্থানীয় ও দূরবর্তী উভয় শাখা, এবং দেখাবে -rপতাকা শো শুধুমাত্র দূরবর্তী শাখা।


2
কেবলমাত্র একটি পার্শ্ব নোট, যখন আমি দেখার চেষ্টা করেছি যে কোনও দূরবর্তী শাখাটি মার্জ করা হয়েছে কিনা আমি প্রথমে একটি স্থানীয় ট্র্যাকিং শাখা সেটআপ করেছি, স্থিতিটি সনাক্ত করেছি git branch --mergedএবং তারপরে স্থানীয় এবং দূরবর্তী শাখাগুলি মুছলাম।
কেনেথ কালামার

83
git branch -a --merged/no-mergedপ্রক্রিয়াটিতে স্থানীয় ট্র্যাকিং শাখা তৈরি না করে দৃশ্যত, এটিও কাজ করে।
ফ্রেসকোমা

70
বা কেবলমাত্র git branch -r --merged/--no-mergedদূরবর্তী শাখাগুলি সন্ধান করতে।
আসফ্যান্ড কাজী

5
রিমার্জ করার পরে প্রকৃতভাবে একীভূত হওয়া নিমজ্জিত শাখাগুলি মুছার কোনও উপায়?
আশফাম

9
নোটটি --merged/--no-mergedএটির পরে একটি alচ্ছিক প্রতিশ্রুতি যুক্তি নেয়। কমপক্ষে আমার গিট সংস্করণে (1.9.1), পতাকা -aবা -rপতাকা যুক্ত করার পরে এটি আমাকে মারাত্মক ত্রুটি দেয়। এর আগে-a বা -r আগে যুক্ত করুন --(no-)merged
জোনাথন গাওরিচ

113

আপনি git merge-baseদুটি শাখার মধ্যে সর্বশেষ সাধারণ প্রতিশ্রুতি সন্ধান করতে কমান্ডটি ব্যবহার করতে পারেন । যদি সেই প্রতিশ্রুতি আপনার শাখার প্রধানের মতো হয় তবে শাখাটি পুরোপুরি একত্রিত হয়ে গেছে।

নোটটি git branch -dইতিমধ্যে এই ধরণের জিনিসটি করে কারণ এটি ইতিমধ্যে সম্পূর্ণভাবে মার্জ করা হয়নি এমন একটি শাখা মুছতে অস্বীকার করবে ।


3
@ হরির উত্তর এটি কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও বিশদে যায়।
মুহাদে

আমরা কীভাবে স্বয়ংক্রিয়ভাবে / প্রোগ্রামটিমে এটি করতে পারি?
আলেকজান্ডার মিলস 23

1
"ইতিমধ্যে পুরোপুরি একীভূত হয়নি" ... কোন শাখায় পুরোপুরি একত্রী হয়েছে?
আলেকজান্ডার মিলস

@ আলেকজান্ডারমিলস: আপনার বর্তমান শাখায়।
গ্রেগ হিউগিল

2
@ আলেকজান্ডারমিলস: git branch -dবর্তমান শাখায় একীভূত হয়নি এমন একটি শাখা মুছে ফেলা অস্বীকার করবে। বর্তমান শাখাটি মোছা হচ্ছে না ।
গ্রেগ হিউগিল

27

পাশাপাশি একটি গ্রাফিকাল ইন্টারফেস সমাধান আছে। লিখো

gitk --all

একটি নতুন অ্যাপ্লিকেশন উইন্ডো আপনার পুরো রেপোর গ্রাফিকাল উপস্থাপনা সহ প্রম্পট করবে, যেখানে কোনও শাখা ইতিমধ্যে মার্জ করা হয়েছে কিনা তা উপলব্ধি করা খুব সহজ where


17
যা পরিষ্কার হওয়া দরকার, এমন কোনও অ্যাপ্লিকেশন ইনস্টল করা দরকার যা gitক্লায়েন্টের অংশ নয় । উবুন্টুতে apt-get install gitk,।
মিলিত হয়েছে

MacOS, আপনি আছে যদি Homebrew ইনস্টল হবে brew install git-gui, পেতে gitkকমান্ড করেন।
program247365

24

আমি নিম্নলিখিত বাশ ফাংশনটি ব্যবহার করছি: git-is-merged develop feature/new-feature

git-is-merged () {
  merge_destination_branch=$1
  merge_source_branch=$2

  merge_base=$(git merge-base $merge_destination_branch $merge_source_branch)
  merge_source_current_commit=$(git rev-parse $merge_source_branch)
  if [[ $merge_base = $merge_source_current_commit ]]
  then
    echo $merge_source_branch is merged into $merge_destination_branch
    return 0
  else
    echo $merge_source_branch is not merged into $merge_destination_branch
    return 1
  fi
}

3
এটি আসলে কাজ করে না। যদি উত্স শাখাটি ইতিমধ্যে গন্তব্য শাখায় একীভূত করা হয়েছে, এবং তার পরে গন্তব্য শাখা আরও কয়েকটি কমিট করে, এটি আর কাজ করে না তবে কেন জানি না
আলেকজান্ডার মিলস

1
এখানে প্রশ্নটি দেখুন: স্ট্যাকওভারফ্লো
আলেকজান্ডার মিলস

18

ব্যবহার git merge-base <commit> <commit>

এই আদেশটি দুটি কমিটের মধ্যে সেরা সাধারণ পূর্বপুরুষদের (স) খুঁজে বের করে। এবং যদি সাধারণ পূর্বপুরুষ একটি "শাখা" এর শেষ প্রতিশ্রুতির সাথে সমান হয়, তবে আমরা নিরাপদে ধরে নিতে পারি যে একটি "শাখা" ইতিমধ্যে মাস্টারের মধ্যে মিশে গেছে।

পদক্ষেপগুলি এখানে

  1. মাস্টার শাখায় শেষ প্রতিশ্রুতিবদ্ধ হ্যাশ সন্ধান করুন
  2. একটি "শাখায়" শেষ প্রতিশ্রুতিবদ্ধ হ্যাশ সন্ধান করুন
  3. কমান্ড চালান git merge-base <commit-hash-step1> <commit-hash-step2>
  4. যদি পদক্ষেপ 3 এর আউটপুট ধাপ 2 এর আউটপুট সমান হয় তবে একটি "শাখা" ইতিমধ্যে মাস্টারে মার্জ করা হয়েছে।

গিট মার্জ-বেস সম্পর্কে আরও তথ্য https://git-scm.com/docs/git- विसیا- বেস ।


2
আমি মনে করি টিপসগুলিকে একীভূত করা হলে এটি কেবল আপনাকে জানাবে। উদাহরণস্বরূপ, এটি আপনাকে বলবে না যে এতে masterএকীভূত হয়েছিল branchএবং তারপরে আরও 4 টি কমিট যুক্ত হয়েছিল branch
এমকোবিট

কেন না git log -1 $(git merge-base base-branch feature-branch)এবং যদি আপনি feature-branchআউটপুটে দেখেন , তবে আপনি কি জানেন যে তারা একত্রিত হয়েছে?
কার্ল জি

12

প্রত্যন্ত শাখাগুলি পরিষ্কার করার বিষয়ে

git branch -r | xargs -t -n 1 git branch -r --contains

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

কোন দূরবর্তী শাখাগুলি মার্জ করা হয়েছে তবে মুছে ফেলা হয়নি এবং কোনগুলি মার্জ করা হয়নি এবং এভাবে ক্ষয় হচ্ছে তা নির্ধারণ করার জন্য এটি দরকারী।

আপনি যদি 'টিগ' ব্যবহার করেন (এটি গিটকের মতো তবে টার্মিনাল ভিত্তিক) তবে আপনি এটি করতে পারেন

tig origin/feature/someones-decaying-feature

চেকআউট না করে কোনও শাখার অঙ্গীকারের ইতিহাস দেখতে


3
ভাল করেছো লোকটা! এটি আসলে কী প্রদর্শিত হচ্ছে তার চারপাশে একবার আপনার মাথা পেলে খুব দরকারী! গিটহাব অ্যাপ্লিকেশনটিকে এটিকে আপনার শাখাগুলির ভিজ্যুয়াল ডিসপ্লেতে অন্তর্ভুক্ত করা দরকার, কোনও হায়ারার্কি সহ বর্ণানুক্রমিক তালিকার চেয়ে!
সিএম্যাশ

12

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

  • git branch <flag[-r/-a/none]> --merged master সমস্ত শাখার তালিকা মাস্টারে বিভক্ত।
  • git branch <flag[-r/-a/none]> --merged master | wc -l মাস্টারে একত্রীকৃত সমস্ত শাখার সংখ্যা গণনা করুন।

পতাকাগুলি হ'ল:

  • -aপতাকা - (সমস্ত) দূরবর্তী এবং স্থানীয় শাখা দেখায়
  • -rপতাকা - (দূরবর্তী) কেবল দূরবর্তী শাখা দেখায়
  • <emptyFlag>- শুধুমাত্র স্থানীয় শাখা দেখানো হচ্ছে

উদাহরণস্বরূপ: git branch -r --merged master আপনাকে সমস্ত দূরবর্তী সংগ্রহস্থলকে মাস্টারে মার্জ করে দেখিয়ে দেবে।


5

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

এই পদ্ধতির কোনওটিই মূর্খ প্রমাণ নয়, তবে আমি এগুলিকে বহুবার দরকারী বলে মনে করেছি।

1 সমস্ত শাখার জন্য লগ প্রদর্শন করুন

গিটক বা টরটোইজিটের মতো ভিজ্যুয়াল সরঞ্জাম ব্যবহার করে, বা কেবল - সমস্ত গিট লগ সহ প্রধান শাখায় সমস্ত সংযুক্তি দেখতে ইতিহাস জুড়ে see এই নির্দিষ্ট বৈশিষ্ট্য শাখাটি মার্জ করা হয়েছে কিনা তা আপনার স্পট করতে সক্ষম হওয়া উচিত।

2 বৈশিষ্ট্য শাখায় মার্জ করার সময় সর্বদা দূরবর্তী শাখা সরান

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

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

উদাহরণ তৈরি করুন / সমাপ্ত বৈশিষ্ট্য শাখা

554 Andreas:MyRepo(develop)$ git flow start tmp
Switched to a new branch 'feature/tmp'

Summary of actions:
- A new branch 'feature/tmp' was created, based on 'develop'
- You are now on branch 'feature/tmp'

Now, start committing on your feature. When done, use:

     git flow feature finish tmp

555 Andreas:MyRepo(feature/tmp)$ git flow finish
Switched to branch 'develop'
Your branch is up-to-date with 'if/develop'.
Already up-to-date.

[post-flow-feature-finish] Delete remote branch? (Y/n)
Deleting remote branch: origin/feature/tmp.

Deleted branch feature/tmp (was 02a3356).

Summary of actions:
- The feature branch 'feature/tmp' was merged into 'develop'
- Feature branch 'feature/tmp' has been locally deleted
- You are now on branch 'develop'

556 Andreas:ScDesktop (develop)$

.git / আঙ্গুলসমূহ / পোস্ট-প্রবাহ-বৈশিষ্ট্য ফিনিস

NAME=$1
ORIGIN=$2
BRANCH=$3

# Delete remote branch
# Allows us to read user input below, assigns stdin to keyboard
exec < /dev/tty

while true; do
  read -p "[post-flow-feature-finish] Delete remote branch? (Y/n) " yn
  if [ "$yn" = "" ]; then
    yn='Y'    
  fi
  case $yn in
      [Yy] ) 
        echo -e "\e[31mDeleting remote branch: $2/$3.\e[0m" || exit "$?"
        git push $2 :$3; 
        break;;
      [Nn] ) 
        echo -e "\e[32mKeeping remote branch.\e[0m" || exit "$?"
        break;;
      * ) echo "Please answer y or n for yes or no.";;
  esac
done

# Stop reading user input (close STDIN)
exec <&-
exit 0

3 প্রতিশ্রুতিবদ্ধ বার্তা দ্বারা অনুসন্ধান করুন

আপনি যদি সর্বদা দূরবর্তী শাখাটি অপসারণ না করেন, তাহলেও শাখাটি মার্জ করা হয়েছে কিনা তা নির্ধারণ করার জন্য আপনি একই জাতীয় কমিট অনুসন্ধান করতে পারেন। এখানে দুর্ভাগ্য হ'ল দূরবর্তী শাখাটি যদি অজ্ঞাতনামা হিসাবে পুনর্বার করা হয় যেমন স্কোয়াশিং কমিট বা কমিট বার্তা পরিবর্তন করা।

  • সমস্ত রিমোটগুলি আনুন এবং ছাঁটাই করুন
  • বৈশিষ্ট্য শাখায় শেষ প্রতিশ্রুতি বার্তা সন্ধান করুন
  • একই বার্তা সহ কোনও কমিট মাস্টার শাখায় পাওয়া যাবে কিনা তা দেখুন

মাস্টার শাখায় কমান্ড উদাহরণ:

gru                   
gls origin/feature/foo
glf "my message"

আমার ব্যাশ। প্রোফাইল কনফিগারেশনে

alias gru='git remote update -p'
alias glf=findCommitByMessage

findCommitByMessage() {
    git log -i --grep="$1"
}

@ জাঞ্জিয়াস - পদক্ষেপ 1 - আপনি কীভাবে জানবেন কোন শাখাগুলি প্রধানতে একীভূত করা হয়েছে। আমি লগগুলি এবং গুই সরঞ্জামগুলি দেখছি - এবং এটি স্পষ্টভাবে এটি যেখানে দেখায় সেখানে কোথাও খুঁজে পাচ্ছি না ???
হাফ

@ দ্য হাফ চেষ্টা করুন:git log --all --color --graph --decorate --topo-order --date=relative --abbrev-commit --pretty=format:"%C(green)%h %C(red bold)[%<(14)%ad] %Creset%s%Cred%d%C(blue) [%an]"
এঙ্গুলারসেন

@ দ্য হাফ টর্টোইজগিতে, আপনি যদি প্রধান শাখায় থাকেন তবে এটি সমস্ত সংযুক্তিকে প্রধানতে দেখানো উচিত।
Angularsen

ধন্যবাদ - তবে আমি কীভাবে জানব যে একত্রীকরণ কী? আমি ধরে নিচ্ছি তারা সবাই কমিট করছে - এটা কি ঠিক?
হাফ

@ দ্য হাফ: আপনার একক প্রতিশ্রুতিবদ্ধ "ডাউন স্ট্রিম" (লগ ভিউতে উচ্চতর) সাথে একত্রিত হওয়ার জন্য দুটি স্ট্রিম / কমিটের পথটি দৃশ্যত দেখতে হবে। যে কমিট একটি মার্জ কমিট। এছাড়াও, আপনি কেবল মার্জ কমিটগুলি প্রদর্শন git logকরতে যোগ করতে পারেন --mergesstackoverflow.com/a/25986615/134761
angularsen

4

এখানে একটি সামান্য এক-লাইনার যা আপনাকে জানতে দেবে যে আপনার বর্তমান শাখাটি কোনও দূরবর্তী উত্স / মাস্টার শাখা থেকে অন্তর্ভুক্ত রয়েছে বা তথ্য থেকে বেরিয়ে গেছে:

$ git fetch && git branch -r --merged | grep -q origin/master && echo Incorporates origin/master || echo Out of date from origin/master

কোনও বৈশিষ্ট্য শাখায় কাজ করার সময় এবং প্রায়শই আমার নিজের পৃথক কার্যনির্বাহী শাখায় আমার সাম্প্রতিক কাজটি অন্তর্ভুক্ত করা হয়েছে কিনা তা নিশ্চিত করতে চাইলে আমি এই প্রশ্নটি জুড়ে এসেছি।

এই পরীক্ষাটি সাধারণীকরণের জন্য আমি আমার ~ / .gitconfig এ নিম্নলিখিত উপন্যাসটি যুক্ত করেছি:

[alias]
   current = !git branch -r --merged | grep -q $1 && echo Incorporates $1 || echo Out of date from $1 && :

তারপরে আমি কল করতে পারি:

$ git current origin/master

আমি বর্তমান কিনা তা পরীক্ষা করতে

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