जवाबों:
git branch --merged master
सूचियाँ मास्टर में विलीन हो जाती हैं
git branch --merged
सूचियाँ HEAD में विलीन हो गईं (अर्थात वर्तमान शाखा का सिरा)
git branch --no-merged
उन शाखाओं को सूचीबद्ध करता है जिनका विलय नहीं किया गया है
डिफ़ॉल्ट रूप से यह केवल स्थानीय शाखाओं पर लागू होता है। -a
ध्वज को स्थानीय और रिमोट शाखाओं, और दिखाएगा -r
झंडा शो केवल दूरस्थ शाखाओं।
git branch -a --merged/no-merged
इस प्रक्रिया में एक स्थानीय ट्रैकिंग शाखा बनाए बिना भी काम करता है।
git branch -r --merged/--no-merged
दूरस्थ शाखाओं को खोजने के लिए।
--merged/--no-merged
इसके बाद एक वैकल्पिक प्रतिबद्ध तर्क लेता है। कम से कम मेरे संस्करण के git (1.9.1) में, -a
या -r
झंडे को जोड़ने के बाद यह मुझे एक घातक त्रुटि देता है। -a
या -r
इससे पहले जोड़ें --(no-)merged
।
आप git merge-base
दो शाखाओं के बीच नवीनतम आम प्रतिबद्धताओं को खोजने के लिए कमांड का उपयोग कर सकते हैं । यदि वह प्रतिबद्ध आपकी शाखा प्रमुख के समान है, तो शाखा पूरी तरह से विलय कर दी गई है।
ध्यान दें कि
git branch -d
बात इस तरह की पहले से ही करता है, क्योंकि यह एक शाखा है कि नष्ट करने के लिए मना कर देगा नहीं किया गया है पहले से ही पूरी तरह से विलय कर दिया गया।
git branch -d
उस शाखा को हटाने से इंकार कर देगा जिसे वर्तमान शाखा में विलय नहीं किया गया है। वर्तमान शाखा को हटाना नहीं ।
एक ग्राफिकल इंटरफ़ेस समाधान भी है। बस टाइप करो
gitk --all
एक नई एप्लिकेशन विंडो आपके पूरे रेपो के चित्रमय प्रतिनिधित्व के साथ संकेत देगी, जहां यह महसूस करना बहुत आसान है कि क्या पहले से ही एक शाखा को बदला गया था या नहीं
git
क्लाइंट का हिस्सा नहीं है । उबंटू पर, apt-get install gitk
।
brew install git-gui
, प्राप्त करने के लिए gitk
कमांडलाइन पर।
मैं निम्नलिखित बैश फ़ंक्शन का उपयोग कर रहा हूं जैसे: 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
}
का उपयोग करें git merge-base <commit> <commit>
।
यह कमांड दो कमिट के बीच सबसे अच्छा सामान्य पूर्वज (एस) पाता है। और अगर सामान्य पूर्वज एक "शाखा" के अंतिम प्रतिबद्ध के समान है, तो हम सुरक्षित रूप से मान सकते हैं कि "शाखा" को पहले ही मास्टर में मिला दिया गया है।
यहाँ कदम हैं
git merge-base <commit-hash-step1> <commit-hash-step2>
। Git मर्ज-बेस https://git-scm.com/docs/git-merge-base पर अधिक जानकारी ।
master
विलय किया गया था branch
, और फिर 4 और कमिट्स को इसमें जोड़ा गया था branch
।
git log -1 $(git merge-base base-branch feature-branch)
और यदि आप feature-branch
आउटपुट में देखते हैं , तो आप जानते हैं कि वे विलय कर रहे हैं?
सुदूर शाखाओं की सफाई के विषय पर
git branch -r | xargs -t -n 1 git branch -r --contains
इसके बाद प्रत्येक दूरस्थ शाखा को सूचीबद्ध किया जाता है जिसके बाद दूरस्थ शाखाएँ उनके नवीनतम SHAs हैं।
यह पता लगाने के लिए उपयोगी है कि कौन सी दूरस्थ शाखाओं को विलय कर दिया गया है लेकिन हटाया नहीं गया है, और जिसे विलय नहीं किया गया है और इस प्रकार क्षय हो रहा है।
अगर आप 'tig' (इसके gitk जैसे टर्मिनल पर आधारित) का उपयोग कर रहे हैं तो आप कर सकते हैं
tig origin/feature/someones-decaying-feature
चेकआउट को चेक किए बिना किसी शाखा के प्रतिबद्ध इतिहास को देखने के लिए
यह सत्यापित करने के लिए कि आपको इन आदेशों का उपयोग किस शाखा में करना चाहिए?
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
आपको मास्टर में विलय किए गए सभी दूरस्थ रिपॉजिटरी दिखाएंगे।
यहां मेरी तकनीकें हैं जब मुझे यह पता लगाने की आवश्यकता होती है कि क्या एक शाखा को विलय कर दिया गया है, भले ही यह हमारी मुख्य शाखा के साथ अद्यतित होने के लिए छूट दी गई हो, जो कि सुविधा शाखाओं के लिए एक सामान्य परिदृश्य है।
इन दृष्टिकोणों में से कोई भी मूर्ख सबूत नहीं है, लेकिन मैंने उन्हें कई बार उपयोगी पाया है।
Gitk या TortoiseGit जैसे किसी दृश्य उपकरण का उपयोग करना, या बस git लॉग --all के साथ, मुख्य शाखा में सभी मर्ज को देखने के लिए इतिहास के माध्यम से जाना। आपको यह पता लगाने में सक्षम होना चाहिए कि इस विशेष सुविधा शाखा का विलय किया गया है या नहीं।
यदि आपके पास एक सुविधा शाखा में विलय होने पर स्थानीय और दूरस्थ शाखा दोनों को हमेशा हटाने की अच्छी आदत है, तो आप बस अपने अन्य कंप्यूटर पर अपडेट और प्रून रीमोट कर सकते हैं और सुविधा शाखाएं गायब हो जाएंगी।
ऐसा करने में याद रखने में मदद करने के लिए, मैं अपनी सुविधा शाखाओं को स्थानीय रूप से बनाने और मर्ज करने के लिए पहले से ही git flow एक्सटेंशन (AVH संस्करण) का उपयोग कर रहा हूं , इसलिए मैंने यह पूछने के लिए निम्न git फ़्लो हुक को जोड़ा कि क्या मैं रिमोट ब्रांच को ऑटो-रिमूव करना चाहता हूं।
उदाहरण बनाएँ / सुविधा शाखा को समाप्त करें
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
यदि आप हमेशा दूरस्थ शाखा को नहीं निकालते हैं, तो आप अभी भी इसी तरह के कमिट की खोज कर सकते हैं कि शाखा का विलय हुआ है या नहीं। यहाँ नुकसान यह है कि यदि रिमोट ब्रांच को अस्वीकार्य किया गया है, जैसे कि कमिट करना या कमिट संदेश बदलना।
उदाहरण मास्टर शाखा पर आदेश:
gru
gls origin/feature/foo
glf "my message"
मेरे बैश में .profile config
alias gru='git remote update -p'
alias glf=findCommitByMessage
findCommitByMessage() {
git log -i --grep="$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]"
git log
आप --merges
केवल मर्ज कमिट दिखाने के लिए जोड़ सकते हैं । stackoverflow.com/a/25986615/134761
यहाँ एक छोटा सा लाइनर है जो आपको बताएगा कि आपकी वर्तमान शाखा सम्मिलित है या दूरस्थ मूल / मास्टर शाखा के डेटा से बाहर है:
$ 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
जाँच करने के लिए कि क्या मैं चालू हूँ।
git branch --merged
और फिर स्थानीय और दूरस्थ शाखाओं को हटा दिया।