दिलचस्प पोस्ट
क्या कोई विवरण है कि कैसे __cmp__ पायथन 2 में डिक् ऑब्जेक्ट्स के लिए काम करता है? JSON वर्ण एन्कोडिंग जांचें कि ऑब्जेक्ट सदस्य नेस्टेड ऑब्जेक्ट में मौजूद है या नहीं COUNT प्रति मूल्य के अनुसार आदेश गैर-स्थिर विधि को एक लक्ष्य की आवश्यकता होती है आवेदन में अंतर / जेसन और आवेदन / एक्स-www-फॉर्म-यूआरएलएक्सोडेड TryUpdateModel, एएसपी। NET MVC 3 का वास्तविक उदाहरण क्यों जावास्क्रिप्ट में बहसें। Calere.caller संपत्ति नापसंद थी? उत्पादन में गिट पुश (एफ़टीपी) @PostConstruct विधि पर लेनदेन @ किसी वेब पेज से क्रोम एक्सटेंशन पर संदेश भेजना मैं HttpURLConnection को प्रॉक्सी का उपयोग कैसे कर सकता हूं? सी ++ में बिटमैप ऑब्जेक्ट के रूप में खिड़की का स्क्रीनशॉट कैसे प्राप्त करें? आर पैकेज के विकास संस्करण को कैसे स्थापित करें github repository? ToList () को कॉल करते समय क्या कोई प्रभाव पड़ता है?

मैं सबसे हाल ही में किए गए आदेश के अनुसार जीआईटी की शाखाओं की एक सूची कैसे प्राप्त करूं?

मैं शीर्ष पर "ताज़ा" शाखाओं के साथ जीआईटी भंडार में सभी शाखाओं की एक सूची प्राप्त करना चाहता हूं, जहां "सबसे ताज़ी" शाखा सबसे हाल ही में दी गई है (और इसलिए, यह एक होने की अधिक संभावना है मैं ध्यान देना चाहता हूं)।

क्या कोई तरीका है कि मैं गिट का उपयोग या तो (ए) नवीनतम कमिट द्वारा शाखाओं की सूची को सॉर्ट कर सकता हूं, या (बी) किसी भी मशीन-पठनीय प्रारूप में, हर एक की आखिरी तिथि के साथ शाखाओं की सूची प्राप्त कर सकता है?

सबसे खराब मामले, मैं हमेशा सभी शाखाओं की सूची प्राप्त करने के लिए, अपने आउटपुट को पार्स करने के लिए git branch चला सकता हूं, और फिर git log -n 1 branchname --format=format:%ci प्रत्येक git log -n 1 branchname --format=format:%ci लिए git log -n 1 branchname --format=format:%ci , प्रत्येक शाखा की git log -n 1 branchname --format=format:%ci डेट प्राप्त करने के लिए। लेकिन यह एक विंडोज़ बॉक्स पर चलेगा, जहां एक नई प्रक्रिया को कताई करना अपेक्षाकृत महंगा है, इसलिए जीआईटी निष्पादन योग्य बनाना एक बार प्रति शाखा धीमी हो सकती है अगर बहुत सी शाखाएं हैं क्या यह सब एक ही आदेश के साथ करने का एक तरीका है?

वेब के समाधान से एकत्रित समाधान "मैं सबसे हाल ही में किए गए आदेश के अनुसार जीआईटी की शाखाओं की एक सूची कैसे प्राप्त करूं?"

git for-each-ref में git for-each-ref --sort=-committerdate विकल्प का उपयोग करें;
गीट git branch लिए गीट 2.7.0 के बाद भी उपलब्ध है:

बुनियादी उपयोग:

 git for-each-ref --sort=-committerdate refs/heads/ # or using git branch (since version 2.7.0) git branch --sort=-committerdate # DESC git branch --sort=committerdate # ASC 

परिणाम:

परिणाम

उन्नत उपयोग:

 git for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))' 

परिणाम:

परिणाम

जेकब के जवाब और जो की टिप पर विस्तार करने के लिए, निम्नलिखित "रेफ्रेंस / हेड /" को निकाल देंगे ताकि आउटपुट केवल शाखा के नाम दिखाए जा सकें:

 git for-each-ref --count=30 --sort=-committerdate refs/heads/ --format='%(refname:short)' 

परीक्षण!

यहां इष्टतम कोड है, जो अन्य दो उत्तरों को जोड़ता है:

 git for-each-ref --sort=-committerdate refs/heads/ --format='%(committerdate:short) %(authorname) %(refname:short)' 

यहां एक सरल कमांड है जो सभी शाखाओं की नवीनतम कमेटी को सूचीबद्ध करता है:

 git branch -v 

सबसे हाल ही में प्रतिबद्ध द्वारा आदेश करने के लिए, उपयोग करें

 git branch -v --sort=committerdate 

स्रोत: http://git-scm.com/book/en/Git-Branching-Branch-Management

मुझे किसी भी डुप्लिकेट के बिना रंग, टैग और रिमोट संदर्भों की आवश्यकता भी थी:

 for ref in $(git for-each-ref --sort=-committerdate --format="%(refname)" refs/heads/ refs/remotes ); do git log -n1 $ref --pretty=format:"%Cgreen%cr%Creset %C(yellow)%d%Creset %C(bold blue)<%an>%Creset%n" | cat ; done | awk '! a[$0]++' 

चूंकि उद्धरण कठिन हो सकता है, यहां बास के लिए उपनाम है:

 alias glist='for ref in $(git for-each-ref --sort=-committerdate --format="%(refname)" refs/heads/ refs/remotes ); do git log -n1 $ref --pretty=format:"%Cgreen%cr%Creset %C(yellow)%d%Creset %C(bold blue)<%an>%Creset%n" | cat ; done | awk '"'! a["'$0'"]++'" 

मैं निम्नलिखित उपनाम का उपयोग करता हूं:

recent = "!r(){git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)'|column -ts'|'}; r"

जो उत्पादन करता है: परिणाम

संपादित करें: उपयोग करें '|' अलग करने के लिए, @ ब्योर्न Lindqvist के लिए धन्यवाद

अपडेट: वर्तमान शाखा से पहले * जोड़ा गया, धन्यवाद @ अलहाडी
संपादित करें: एक ऐसा मामला तय किया गया जहां वर्तमान शाखा दूसरे शाखा का एक उपनाम था

संपादित करें: मौजूदा शाखा के लिए सरल सिंटैक्स का उपयोग करें, जोशुआ स्क्रोजीपीक के लिए धन्यवाद

अन्य उत्तर वर्बोज़ आउटपुट प्राप्त करने के लिए -vv को पास करने की अनुमति नहीं देते

तो यहां एक एक लाइनर है जो कि git branch -vv तारीख को प्रतिबद्ध करता है, रंग आदि को संरक्षित करता है:

 git branch -vv --color=always | while read; do echo -e $(git log -1 --format=%ct $(echo "_$REPLY" | awk '{print $2}' | perl -pe 's/\e\[?.*?[\@-~]//g') 2> /dev/null || git log -1 --format=%ct)"\t$REPLY"; done | sort -r | cut -f 2 

यदि आप प्रतिबद्ध तिथि को प्रिंट करना चाहते हैं, तो आप इसके बजाय इस संस्करण का उपयोग कर सकते हैं:

 git branch -vv --color=always | while read; do echo -e $(git log -1 --format=%ci $(echo "_$REPLY" | awk '{print $2}' | perl -pe 's/\e\[?.*?[\@-~]//g') 2> /dev/null || git log -1 --format=%ci)" $REPLY"; done | sort -r | cut -d ' ' -f -1,4- 

नमूना आउटपुट:

 2013-09-15 master da39a3e [origin/master: behind 7] Some patch 2013-09-11 * (detached from 3eba4b8) 3eba4b8 Some other patch 2013-09-09 my-feature e5e6b4b [master: ahead 2, behind 25] WIP 

यह संभवतः कई पंक्तियों में अधिक पठनीय विभाजन है:

 git branch -vv --color=always | while read; do # The underscore is because the active branch is preceded by a '*', and # for awk I need the columns to line up. The perl call is to strip out # ansi colors; if you don't pass --color=always above you can skip this local branch=$(echo "_$REPLY" | awk '{print $2}' | perl -pe 's/\e\[?.*?[\@-~]//g') # git log fails when you pass a detached head as a branch name. # Hide the error and get the date of the current head. local branch_modified=$(git log -1 --format=%ci "$branch" 2> /dev/null || git log -1 --format=%ci) echo -e "$branch_modified $REPLY" # cut strips the time and timezone columns, leaving only the date done | sort -r | cut -d ' ' -f -1,4- 

इसे git branch अन्य तर्कों के साथ भी काम करना चाहिए, उदा। दूरस्थ-ट्रैकिंग शाखाओं की सूची में -vva , या -vva दोनों दूरस्थ-ट्रैकिंग और स्थानीय शाखाओं को सूचीबद्ध करने के लिए।

git 2.7 (Q4 2015) सीधे git branch का उपयोग करके शाखा की छंटनी शुरू करेगी:
देखें एए 3 बीसीएन , कमांड एएडीसीबी 7 डी , कम 1515 बी 22 , कमर्शियल एफ 65 एफ 139 , … (23 सितंबर 2015), एडीसीबी 7 डी कमिट करें , 1511 बी 22 कमिट करें , सीए 41799 कम करें (24 सितंबर 2015), और प्रतिबद्ध f65f139 , … (23 सितंबर 2015) कार्तिक द्वारा नायक ( KarthikNayak नायक)
( जूनो सी gitster द्वारा मर्ज किए गए – gitster – कम 7f11b48 , 15 अक्टूबर 2015)

विशेष रूप से, aedcb7d प्रतिबद्ध करें :

branch.c : ' ref-filter ' API का उपयोग करें

branch.c के माध्यम से पुनरावृत्ति के लिए ' branch.c ' का उपयोग करें ' branch.c ' एपीआई करें। इससे ' branch.c ' में उपयोग किए जाने वाले अधिकांश कोड को ' branch.c ' लाइब्रेरी पर कॉल करके हटा दिया जाता है।

यह विकल्प जोड़ता है --sort=<key> :

दिए गए कुंजी के आधार पर सॉर्ट करें
उपसर्ग - मूल्य के अवरोही क्रम में क्रमबद्ध करने के लिए।

आप --sort=<key> विकल्प कई बार उपयोग कर सकते हैं, उस स्थिति में अंतिम कुंजी प्राथमिक कुंजी बन जाती है

समर्थित चाबियाँ उसी के समान git for-each-ref में git for-each-ref
क्रमबद्ध करने के लिए पूर्ण रेफ़ेन के आधार पर सॉर्ट करें (रेफ़िक्स refs/... उपसर्ग सहित) क्रमबद्ध करें। यह अलग सिर सूचीबद्ध करता है (यदि मौजूद है) पहले, तो स्थानीय शाखाएं और अंत में दूरस्थ-ट्रैकिंग शाखाएं

यहाँ:

 git branch --sort=-committerdate 

कार्तिक नायक (कार्तिक नायक ) द्वारा 9 ई 46833 (30 अक्टूबर 2015) को भी देखें।
सहायता-द्वारा: जुनी सी gitster ( gitster )
( जूनो सी gitster द्वारा मर्ज किए गए – gitster – कमेटेड 415095 एफ , 03 नवंबर 2015)

जब संख्यात्मक मूल्यों के अनुसार क्रमबद्ध होता है (उदाहरण के लिए --sort=objectsize ), तब कोई फ़ॉलबैक तुलना नहीं होती है, जब दोनों --sort=objectsize एक ही मान रखते हैं। इससे अप्रत्याशित परिणाम हो सकते हैं (अर्थात् बराबर मानों के साथ रिफ्र्स को सूचीबद्ध करने का क्रम पूर्व-निर्धारित नहीं किया जा सकता) जैसा कि जोहानिस सिक्स ( $ gmane / 280117 ) द्वारा बताया गया है।

इसलिए, जब भी अन्य मानदंड बराबर होता है, तब भी रेफ़ेन के आधार पर वर्णानुक्रमिक तुलना में फॉलबैक

 $ git branch --sort=objectsize * (HEAD detached from fromtag) branch-two branch-one master 

मुझे एक सापेक्ष तिथि का उपयोग करना और इस तरह शाखा नाम को छोटा करना पसंद है:

 git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads 

जो आपको आउटपुट देता है:

 21 minutes ago nathan/a_recent_branch 6 hours ago master 27 hours ago nathan/some_other_branch 29 hours ago branch_c 6 days ago branch_d 

मैं अपने सभी पसंदीदा उपनाम जोड़ने और फिर अपनी टीम को स्क्रिप्ट को साझा करने के लिए एक बैश फ़ाइल बनाने की सलाह देता हूं। यहां सिर्फ यह एक जोड़ने के लिए एक उदाहरण दिया गया है:

 #!/bin/sh git config --global alias.branches "!echo ' ------------------------------------------------------------' && git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads && echo ' ------------------------------------------------------------'" 

तो आप बस एक अच्छी तरह से स्वरूपित और सॉर्ट किया गया स्थानीय शाखा सूची प्राप्त करने के लिए ऐसा कर सकते हैं:

 git branches 

अद्यतन: यदि आप रंग चाहते हैं तो इसे करें:

 #!/bin/sh # (echo ' ------------------------------------------------------------‌​' && git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads && echo ' ------------------------------------------------------------‌​') | grep --color -E "$(git rev-parse --abbrev-ref HEAD)$|$" 

कुछ रंग जोड़ता है (चूंकि pretty-format उपलब्ध नहीं है)

 [alias] branchdate = for-each-ref --sort=-committerdate refs/heads/ --format="%(authordate:short)%09%(objectname:short)%09%1B[0;33m%(refname:short)%1B[m%09" 

मुझे एक ही समस्या थी, इसलिए मैंने टिग नामक एक रूबी मणि लिखा था। यह कालानुक्रमिक क्रम (नवीनतम सबसे पहले) में शाखाओं को सूचीबद्ध करता है, और आप एक अधिकतम आयु सेट भी कर सकते हैं ताकि आप सभी शाखाओं की सूची न दें (यदि आपके पास बहुत से हैं)। उदाहरण के लिए:

 $ twig issue status todo branch ----- ------ ---- ------ 2013-01-26 18:00:21 (7m ago) 486 In progress Rebase optimize-all-the-things 2013-01-26 16:49:21 (2h ago) 268 In progress - whitespace-all-the-things 2013-01-23 18:35:21 (3d ago) 159 Shipped Test in prod * refactor-all-the-things 2013-01-22 17:12:09 (4d ago) - - - development 2013-01-20 19:45:42 (6d ago) - - - master 

यह आपको प्रत्येक शाखा के लिए कस्टम गुणों को स्टोर करने देता है, उदाहरण के लिए, टिकट आईडी, स्थिति, टूड्स, और इन गुणों के अनुसार शाखाओं की सूची को फ़िल्टर करें। अधिक जानकारी: http://rondevera.github.io/twig/

एफवाईआई, यदि आप हाल ही में चेक आउट की गई शाखाओं की सूची प्राप्त करना चाहते हैं (जैसा हाल ही में प्रतिबद्ध है) आप जीआईटी के रेफरल का उपयोग कर सकते हैं:

 $ git reflog | egrep -io "moving from ([^[:space:]]+)" | awk '{ print $3 }' | head -n5 master stable master some-cool-feature feature/improve-everything 

यह भी देखें: मैं हाल ही में बाहर की जाँच की है कि git शाखाओं की एक सूची कैसे प्राप्त कर सकते हैं?

मैं ऊपर दिए गए उदाहरणों को संदर्भित करने में सक्षम था जो मेरे लिए सबसे अच्छा काम करता है।

git for-every-ref -sort = -committerdate refs / heads / –format = '% (authordate: short)% (रंग: लाल)% (वस्तु का नाम: छोटा)% (रंग: पीला)% (रिफ़ाइन: छोटा )% (रंग: रीसेट) (% (रंग: हरा)% (कमिटिडेट: सापेक्ष)% (रंग: रीसेट)) '

आउटपुट का स्क्रीनशॉट

मैं निम्नलिखित कमांड के साथ आया था (गीट 2.13 और बाद के लिए):

 git branch -r --sort=creatordate \ --format "%(creatordate:relative);%(committername);%(refname:lstrip=-1)" \ | grep -v ";HEAD$" \ | column -s ";" -t 

यदि आपके पास column नहीं है तो आप अंतिम पंक्ति को इसके साथ बदल सकते हैं

  | sed -e "s/;/\t/g" 

आउटपुट दिखता है

 6 years ago Tom Preston-Werner book 4 years, 4 months ago Parker Moore 0.12.1-release 4 years ago Matt Rogers 1.0-branch 3 years, 11 months ago Matt Rogers 1.2_branch 3 years, 1 month ago Parker Moore v1-stable 12 months ago Ben Balter pages-as-documents 10 months ago Jordon Bedwell make-jekyll-parallel 6 months ago Pat Hawks to_integer 5 months ago Parker Moore 3.4-stable-backport-5920 4 months ago Parker Moore yajl-ruby-2-4-patch 4 weeks ago Parker Moore 3.4-stable 3 weeks ago Parker Moore rouge-1-and-2 19 hours ago jekyllbot master 

मैंने एक ब्लॉग पोस्ट लिखा था कि कैसे विभिन्न टुकड़े काम करते हैं

यहां एक और स्क्रिप्ट है जो अन्य सभी स्क्रिप्ट करते हैं। वास्तव में, यह आपके शेल के लिए फ़ंक्शन प्रदान करता है

इसका योगदान यह है कि यह आपके git config से कुछ रंग खींचता है (या डिफ़ॉल्ट का उपयोग करता है)

 # Git Branch by Date # Usage: gbd [ -r ] gbd() { local reset_color=`tput sgr0` local subject_color=`tput setaf 4 ; tput bold` local author_color=`tput setaf 6` local target=refs/heads local branch_color=`git config --get-color color.branch.local white` if [ "$1" = -r ] then target=refs/remotes/origin branch_color=`git config --get-color color.branch.remote red` fi git for-each-ref --sort=committerdate $target --format="${branch_color}%(refname:short)${reset_color} ${subject_color}%(subject)${reset_color} ${author_color}- %(authorname) (%(committerdate:relative))${reset_color}" } 

Ilius 'संस्करण के आधार पर, लेकिन एक स्टार और रंग के साथ दिखाए गए वर्तमान शाखा के साथ, और केवल कुछ भी दिखा रहा है जिसे "महीनों" या "साल" पहले वर्णित नहीं किया गया है:

 current_branch="$(git symbolic-ref --short -q HEAD)" git for-each-ref --sort=committerdate refs/heads \ --format='%(refname:short)|%(committerdate:relative)' \ | grep -v '\(year\|month\)s\? ago' \ | while IFS='|' read branch date do start=' ' end='' if [[ $branch = $current_branch ]]; then start='* \e[32m' end='\e[0m' fi printf "$start%-30s %s$end\\n" "$branch" "$date" done 

एक स्क्रिप्ट के रूप में मेरा सबसे अच्छा परिणाम:

 git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short)|%(committerdate:iso)|%(authorname)' | sed 's/refs\/heads\///g' | grep -v BACKUP | while IFS='|' read branch date author do printf '%-15s %-30s %s\n' "$branch" "$date" "$author" done 

मैं उस भिन्नता को देख रहा हूं:

 git for-each-ref --sort=-committerdate --format='%(committerdate)%09%(refname:short)' refs/heads/ | tail -r 

यह tail -r सूची को उलट देता है, इसलिए सबसे हाल ही में commiterdate पिछले है।

यहां पार्टी के लिए देर हो गई। स्वीकार किए जाते हैं सीएमएल उत्तर चट्टानों, लेकिन अगर आप एक सुंदर जीयूआई की तरह, और अपने मूल === "जिथूब" चाहते हैं।

आप रेपो में "शाखाएं" पर क्लिक कर सकते हैं या सीधे यूआरएल को मारा: https://github.com/ORGANIZATION_NAME/REPO_NAME/branches

मुझे एक इंटरेक्टिव सूची देने के लिए, मुझे स्वीकार्य जवाब से आउटपुट को dialog में पाइप करें:

 #!/bin/bash TMP_FILE=/tmp/selected-git-branch eval `resize` dialog --title "Recent Git Branches" --menu "Choose a branch" $LINES $COLUMNS $(( $LINES - 8 )) $(git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short) %(committerdate:short)') 2> $TMP_FILE if [ $? -eq 0 ] then git checkout $(< $TMP_FILE) fi rm -f $TMP_FILE clear 

के रूप में सहेजें (जैसे) ~/bin/git_recent_branches.sh और chmod +x it फिर git config --global alias.rb '!git_recent_branches.sh' मुझे एक नया git rb कमांड देने के लिए।

यहां एक छोटी सी स्क्रिप्ट है जिसका उपयोग मैं हाल की शाखाओं के बीच स्विच करने के लिए करता हूं:

 #!/bin/bash # sudo bash re='^[0-9]+$' if [[ "$1" =~ $re ]]; then lines="$1" else lines=10 fi branchs="$(git recent | tail -n $lines | nl)" branchs_nf="$(git recent-nf | tail -n $lines | nl)" echo "$branchs" # Prompt which server to connect to max="$(echo "$branchs" | wc -l)" index= while [[ ! ( "$index" =~ ^[0-9]+$ && "$index" -gt 0 && "$index" -le "$max" ) ]]; do echo -n "Checkout to: " read index done branch="$( echo "$branchs_nf" | sed -n "${index}p" | awk '{ print $NF }' )" git co $branch clear 

उन दो उपनामों का उपयोग करना

 recent = for-each-ref --sort=committerdate refs/heads/ --format=' %(color:blue) %(authorname) %(color:yellow)%(refname:short)%(color:reset)' recent-nf = for-each-ref --sort=committerdate refs/heads/ --format=' %(authorname) %(refname:short)' 

बस एक जीआईटी रेपो में फोन करें और यह आपको अंतिम एन शाखाएं (डिफ़ॉल्ट रूप से 10) और एक नंबर को अलग-अलग दिखाएगा। शाखा की संख्या इनपुट करें और यह जांचता है