एक गिट शाखा निर्माता का पता लगाएं


159

मैं यह पता लगाना चाहता हूं कि किसने शाखा बनाई।

मैं ऐसा करने में सक्षम हूं:

git branch -a | xargs -L 1 bash -c 'echo "$1 `git log --pretty=format:"%H %an" $1^..$1`"' _

हालांकि, यह प्रति शाखा अंतिम कमेंट लौटाता है, जरूरी नहीं कि जिसने शाखा बनाई हो।


7
आपको git में एक शाखा लेखक / निर्माता नहीं मिल सकता है। आप यहां क्या कर रहे हैं, शाखा के टिप के लेखक हैं। जैसे ही कोई नई कमेटी को आगे बढ़ाएगा, यह बदल जाएगा।
sylvain.joyeux

1
अस्वीकरण: इस प्रश्न / उत्तर में निहित धारणा " प्रति शाखा केवल एक व्यक्ति के साथ वर्कफ़्लो में है "। अन्य वर्कफ़्लोज़ में जहां कम से कम दो सहकर्मी एक शाखा साझा करते हैं, यह जानकारी (शाखा निर्माता) git के माध्यम से प्राप्य नहीं है, और ऊपर दिए गए उत्तर किसी को गलत धारणाओं में ले जा सकते हैं।
रोमैनवेलरी

जवाबों:


56

एक शाखा कुछ भी नहीं एक प्रतिबद्ध सूचक है। जैसे, यह मेटाडेटा को ट्रैक नहीं करता है जैसे "जिसने मुझे बनाया है।" अपने आप को देखो। cat .git/refs/heads/<branch>अपने भंडार में प्रयास करें ।

यह लिखा है, यदि आप वास्तव में इस जानकारी को अपने भंडार में देख रहे हैं, तो शाखा विवरण देखें। वे आपको कम से कम स्थानीय स्तर पर शाखाओं के लिए मनमाना मेटाडेटा संलग्न करने की अनुमति देते हैं।

इसके अलावा डारवर का जवाब इस जानकारी को प्राप्त करने का एक बहुत ही चतुर तरीका है।


मेरे लिए यह .गित / रेफ्स / हेड / <ब्रांच> "रेफ" बहुवचन था
जेफरी लेकोस

4
डारवर का उत्तर, जबकि संभवतः कुछ के लिए उपयोगी है, एक सटीक उत्तर नहीं है। यह मूल प्रश्न का लेखक पहले से ही क्या कर रहा था (अर्थात् एक शाखा के अंतिम कमेंट का नाम प्राप्त करने का) करने का एक अधिक सफल तरीका है।
मटरू

296

लेखक द्वारा दूरस्थ जीआईटी शाखाओं की सूची कमिट तिथि द्वारा क्रमबद्ध की गई है:

git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' --sort=committerdate

8
यह उस शाखा के लिए प्रतिबद्ध अंतिम व्यक्ति है। चूंकि एक शाखा एक प्रतिबद्ध के लिए सिर्फ एक संकेतक है।
दरवार

7
क्या यह विंडोज पर काम करना चाहिए? मुझे "इनपुट फ़ाइल निर्दिष्ट दो बार मिली।"
स्टीव चैम्बर्स

27
सारणीबद्ध स्वरूपण के साथ: git for-each-ref --format='%(committerdate)%09%(authorname)%09%(refname)' | sort -k5n -k2M -k3n -k4n | grep remotes | awk -F "\t" '{ printf "%-32s %-27s %s\n", $1, $2, $3 }'( stackoverflow.com/a/3631819 से विचार प्राप्त हुआ - अधिकतम प्रिंटटाइम / लेखक के नाम की लंबाई के आधार पर awk printf में संख्याओं को समायोजित करने की आवश्यकता हो सकती है
Gary S. Weaver

15
यदि शाखा पर कोई प्रतिबद्ध नहीं है और यदि इसे मास्टर से बनाया गया है, तो "शाखा का लेखक" पूरी तरह से उस शाखा से संबंधित नहीं होता है, लेकिन सिर्फ मास्टर पर अंतिम कमेंट होता है। यदि आप मास्टर से परिवर्तन में खींचते हैं और यह तेजी से आगे है, तो यह फिर से मास्टर पर आखिरी कमेंट है, जिन्होंने संभवतः उस शाखा पर कभी काम नहीं किया।
गुस्ताव

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

46

मैंने --sortझंडे का उपयोग करके पिछले उत्तरों को बदल दिया और कुछ रंग / स्वरूपण जोड़ा:

git for-each-ref --format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p)    %(align:25,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=authordate refs/remotes

1
रंगों में दोष देने के लिए एकदम सही है
suarsenegger


8

DarVar के जवाब में जोड़ना :

git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n | awk '{print $7 $8}'

पुनश्च: हमने लेखक और दूरस्थ शाखा को सुंदर प्रिंट करने के लिए AWK का उपयोग किया।


3
यह तभी काम करता है जब लेखक का नाम एक शब्द हो। यदि यह पहले और अंतिम नामों से अलग हो गया है, तो आपको शाखा नाम के बजाय अंतिम नाम दिखाई देगा ...
लीगाटो

5

आप यह पता लगा सकते हैं कि किसने आपके स्थानीय भंडार में एक शाखा बनाई

git reflog --format=full

उदाहरण आउटपुट:

commit e1dd940
Reflog: HEAD@{0} (a <a@none>)
Reflog message: checkout: moving from master to b2
Author: b <b.none>
Commit: b <b.none>
(...)

लेकिन यह संभवत: बेकार है क्योंकि आमतौर पर आपके स्थानीय भंडार पर ही आप शाखाएँ बनाते हैं।

जानकारी को ./.it/logs/refs/heads/ शाखा में संग्रहीत किया जाता है । उदाहरण सामग्री:

0000000000000000000000000000000000000000 e1dd9409c4ba60c28ad9e7e8a4b4c5ed783ba69b a <a@none> 1438788420 +0200   branch: Created from HEAD

इस उदाहरण में अंतिम प्रतिबद्धता उपयोगकर्ता "बी" से थी जबकि शाखा "बी 2" उपयोगकर्ता "ए" द्वारा बनाई गई थी। यदि आप अपना उपयोगकर्ता नाम बदलते हैं, तो आप सत्यापित कर सकते हैं कि गिट रिफ्लॉग लॉग से जानकारी लेता है और स्थानीय उपयोगकर्ता का उपयोग नहीं करता है।

मुझे उस स्थानीय लॉग जानकारी को केंद्रीय भंडार में संचारित करने की किसी भी संभावना के बारे में नहीं पता है।


4

हम खोज के आधार पर पता लगा सकते हैं

git for-each-ref --format='%(authorname) %09 %(if)%(HEAD)%(then)*%(else)%(refname:short)%(end) %09 %(creatordate)' refs/remotes/ --sort=authorname DESC

1

मान लिया जाये कि:

  1. शाखा से बनाया गया था master
  2. masterअभी तक विलय नहीं किया गया है

 git log --format="%ae %an" master..<HERE_COMES_THE_BRANCH_NAME> | tail -1

0

मुझे पता है कि यह पूरी तरह से सवाल का दायरा नहीं है, लेकिन अगर आपको किसी विशिष्ट लेखक द्वारा केवल फ़िल्टर करने की आवश्यकता है, तो आप हमेशा grep करने के लिए पाइप कर सकते हैं :)

# lists all commits in chronological order that
# belong to the github account with
# username `MY_GITHUB_USERNAME` (obviously you
# would want to replace that with your github username,
# or the username you are trying to filter by)


git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -committerdate | grep 'MY_GITHUB_USERNAME'

खुश कोडिंग! :)


0

DESC की तलाश करने वालों के लिए ... यह काम करने लगता है --sort=-

स्वरूपण के लिए ty, यह करने के लिए नया ... मेरी आँखों में से कुछ खो रहे हैं यह रक्तपात है

git for-each-ref --format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p)    %(align:25,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=-authordate refs/remotes

आगे रेफरी: https://stackoverflow.com/a/5188364/10643471


-1

जहां तक ​​मुझे पता है, आप देख सकते हैं कि क्या आप केवल एक शाखा के निर्माता हैं। यह .गित / रेफरी / हेड / <शाखा> में पहली पंक्ति द्वारा इंगित किया गया है। यदि यह "हेड से निर्मित" के साथ समाप्त होता है तो आप निर्माता हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.